12

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

4

4 回答 4

18

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

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

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

这真的只是冰山一角。你真的只需要在需要时设置名称并且只有你知道那个答案。:-)

于 2012-04-04T10:30:40.073 回答
16

您可以使用对象的名称作为Qt 样式表中的ID 选择器。

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

 myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
于 2012-04-05T14:33:20.477 回答
7

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

于 2012-04-04T10:29:10.403 回答
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"); 

其中“按钮”是对象名称

于 2012-04-04T10:25:01.743 回答