Qt ObjectName()必须是唯一的吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt ObjectName()必须是唯一的吗?相关的知识,希望对你有一定的参考价值。

标题中的简单问题 - 如果我在一个对象上调用setObjectName(),它是否必须是唯一的,还是仅仅因为惯例而被推荐?我已经将QLabel子类化,并希望自动为对象创建一个名称;如果这是一个坏主意,我会找到一些设置随机唯一名称的方法。 (我实际上正在使用PyQt,但这不应该影响答案!)

更新

至于回答到目前为止的2个答案(我应该预测到的!),我想这样做,以便我可以忽略我的子类的所有实例。调用findChildren(QLabel)级联,以便找到QLabel的所有子类 - 如果我对所有子类对象使用相同的对象名,那么我可以在findChildren()的第二个参数中使用正则表达式,这样我就可以忽略它们

答案

如果你看一下Qaz的documentation,你可以看到它说:

此属性保存此对象的名称。您可以使用findChild()按名称(和类型)查找对象。您可以使用findChildren()找到一组对象。

看看findChildren(),它说: -

返回具有给定名称的此对象的所有子项,可以将其强制转换为类型T ...

因此,很明显可以看出多个对象可以具有相同的名称。

另一答案

不,但没有唯一名称,您将无法按名称查找对象(无需额外检查)。

另一答案

不严格需要设置对象名称,默认为空字符串。但是,如果您需要按名称查找对象,您肯定希望它是唯一的!

另一答案

对象名称基本上不用于任何重要的地方。这取决于你如何设置它。有两点需要注意:

  1. setupUi函数在由uic生成的代码中创建的对象:所有对象都有名称,名称是唯一的。不过,这只是为了您的方便。
  2. 在对象上使用QMetaObject::connectSlotsByName时,只要对象名为on_foo_bar,所有名为bar的插槽都将连接到子对象的foo信号。
  3. 当为小部件使用CSS样式表(QWidget类层次结构)时,对象名称可以在id选择器中用作id。这有时候很方便。

以上是关于Qt ObjectName()必须是唯一的吗?的主要内容,如果未能解决你的问题,请参考以下文章

聚集索引必须是唯一的吗?

PyQt:有没有更好的方法在代码中设置对象名称?

ID 在整个页面中必须是唯一的吗?

Android View id 必须是唯一的吗?

django csrf 令牌在每个请求上都必须是唯一的吗?

变量名称在查询批处理或存储过程中必须是唯一的吗?