标题中的简单问题 - 如果我在一个对象上调用setObjectName()
,它是否必须是唯一的,还是仅仅因为惯例而推荐?我已经将QLabel
子类化,并希望自动为创建的对象创建一个名称;如果这是一个坏主意,我会找到一些设置随机唯一名称的方法。 (我实际上使用PyQt,但这不应该影响答案!)
更新
到目前为止回答2个答案(我应该已经预测到了!),我想这样做,这样我就可以忽略我的子类的所有实例。调用findChildren(QLabel)
级联以便找到QLabel
的所有子类 - 如果我对所有子类对象使用相同的对象名,那么我可以在findChildren()
的第二个参数中使用正则表达式我忽略了他们
答案 0 :(得分:2)
如果查看Q {的documentation,可以看到它指出: -
此属性包含此对象的名称。 您可以使用findChild()按名称(和类型)查找对象。您可以使用 findChildren()找到一组对象。
查看findChildren(),它指出: -
返回具有给定名称的此对象的所有子项,可以强制转换为类型T ...
因此,显然可以看出多个对象可以具有相同的名称。
答案 1 :(得分:1)
不,但如果没有唯一名称,您将无法按名称查找对象(无需额外检查)。
答案 2 :(得分:1)
不严格要求设置对象名称,默认为空字符串。 但是,如果您需要按名称查找对象,您肯定希望它是唯一的!
答案 3 :(得分:1)
对象名称基本上不用于任何重要的地方。这取决于你如何设置它。有两点需要注意:
由u {生成的代码中的setupUi
函数创建的对象:所有对象都有名称,名称是唯一的。不过,这只是为了您的方便。
在对象上使用QMetaObject::connectSlotsByName
时,名为on_foo_bar
的所有插槽都将连接到子对象的bar
信号,只要该对象名为foo
}。
当为小部件(QWidget
类层次结构)使用CSS样式表时,对象名称可以在id选择器中用作id。这有时候很方便。