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