Qt 为什么要使用QObject::setObjectName()?
为什么要向QObject添加对象名?我仍然可以在不设置名称的情况下加载和运行任何对象。在对象可编写脚本的情况下,这是有意义的,并且可以这样与findChild一起使用Qt 为什么要使用QObject::setObjectName()?,qt,Qt,为什么要向QObject添加对象名?我仍然可以在不设置名称的情况下加载和运行任何对象。在对象可编写脚本的情况下,这是有意义的,并且可以这样与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<QObje
//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");
//按钮是对象名,需要在qml中为组件定义该名称。objectName:“按钮”
QObject*buttonQML=view.rootObject()->findChild(“按钮”);
其中“button”是对象名有两个原因,我使用对象名的一个主要原因是出于调试目的,如前所述。好的,这取决于您以后计划如何访问QObject。有几个QObject.find()函数可用于访问QObject。该名称添加一个“键”以过滤搜索 例如,在您自己的类中,您可能会使用实例变量来执行此操作,而不是执行搜索,但实际上可能会传递一些您通常不拥有的内容,但您知道有一个特定的按钮需要编辑(例如,Qt内置对话框中的QPushButton)。给按钮起一个名字可以很容易地找到(如果按钮消失、在布局中移动等,它会很健壮),而检查按钮文本或计算它在层次结构中的位置则会更加脆弱(例如,按钮文本可能在版本之间发生变化,或者由于本地化,有人添加了一个新的布局、一个额外的按钮) 或者,在打印指针值时,您可能只需要一些漂亮的调试文本(即,您想知道哪个QObject导致了问题)。它还使脚本编写更容易,但我不会在这里解释原因
这只是冰山一角。如果您需要,并且只有您知道答案,您才需要设置名称。:-) 您可以将对象的名称用作Qt样式表中的 示例:如果希望属性仅应用于一个特定的QLineEdit,可以使用QObject::setObjectName()为其命名,并使用ID选择器引用该属性:
myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");