为什么要在QObject中添加对象名?我仍然可以在不设置名称的情况下加载和运行任何对象。
答案 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”是对象名称