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

Dew*_*rld 9 qt

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

小智 16

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

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

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

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


Bil*_*ill 12

您可以在Qt样式表中将对象的名称用作ID选择器.

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

 myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
Run Code Online (Sandbox Code Playgroud)


Nic*_*ith 7

有几个原因,我使用对象名称的一个重要原因是出于调试目的,如Qt qdebug指南中所述.


Luc*_*chi 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"); 
Run Code Online (Sandbox Code Playgroud)

其中"button"是对象名称