为什么要使用QObject :: setObjectName()?

时间:2012-04-04 10:17:01

标签: qt

为什么要在QObject中添加对象名?我仍然可以在不设置名称的情况下加载和运行任何对象。

4 个答案:

答案 0 :(得分:14)

嗯,这取决于您计划以后如何访问QObject。有几个QObject.find()函数可用于访问QObject。该名称会添加一个“键”来过滤您的搜索。

例如,在您自己的类中,您可能使用实例变量而不是进行搜索,但实际上您可能会传递一些您通常不拥有的内容,但是您知道有一个特定的按钮要编辑(例如,Qt的内置QInputDialogs中的一个QPushButton)。给按钮起一个名字可以很容易找到(如果按钮消失,在布局中移动等,则是健壮的),而检查按钮文本或计算它在层次结构中的位置会更加脆弱(例如,按钮)文本可能会在版本之间发生变化,或者由于本地化,有人会添加新的布局,额外的按钮。

或者,在打印指针值时,您可能只需要一些不错的调试文本(即,您想知道哪个QObject导致了问题)。它还使脚本编写更容易,但我不会在这里解释原因。

这真的只是冰山一角。如果你需要它,你真的只需要设置名称,只有你知道答案。 : - )

答案 1 :(得分:11)

您可以在Qt样式表中将对象的名称用作ID Selector

示例:如果您希望某个属性仅应用于一个特定的QLineEdit,您可以使用QObject :: setObjectName()为其命名,并使用ID选择器来引用它:

 myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");

答案 2 :(得分:7)

有几个原因,我使用对象名称的一个重要原因是出于调试目的in the Qt qdebug guide

答案 3 :(得分:5)

在对象是可编写脚本的情况下有意义,并且可以与findChild一起使用

//button is the object name, which needs to be define in qml for the component.e.g. objectName: "button"
QObject *buttonQML = view.rootObject()->findChild<QObject*>("button"); 

其中“button”是对象名称