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

时间:2014-10-14 15:13:09

标签: qt pyqt

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

更新

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

4 个答案:

答案 0 :(得分:2)

如果查看Q {的documentation,可以看到它指出: -

  

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

查看findChildren(),它指出: -

  

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

  1. 由u {生成的代码中的setupUi函数创建的对象:所有对象都有名称,名称是唯一的。不过,这只是为了您的方便。

  2. 在对象上使用QMetaObject::connectSlotsByName时,名为on_foo_bar的所有插槽都将连接到子对象的bar信号,只要该对象名为foo }。

  3. 当为小部件(QWidget类层次结构)使用CSS样式表时,对象名称可以在id选择器中用作id。这有时候很方便。