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

问题描述 投票:1回答:4

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

更新

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

qt pyqt
4个回答
2
投票

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

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

看看findChildren(),它说: -

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

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


1
投票

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


1
投票

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


1
投票

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

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