从 QWidget 获取对象名称(如从 Qt 设计器看到的)?

for*_*two 5 c++ qt qwidget qtgui qobject

我想在我的 Qt 应用程序中禁用除一组选定的小部件之外的所有小部件。

我想要做的是findChildren使用setEnabled(false).

QList<QWidget *> allWidgets = mainWindow->findChildren<QWidget *>("");
QList<QWidget*>::iterator it;
for (it = allWidgets.begin(); it != allWidgets.end(); it++) {
    if ((*it)->objectName() != "myTable")  // here, objectName is not working!!
    {
        (*it)->setEnabled(false);
    } 
}
Run Code Online (Sandbox Code Playgroud)

objectName()上面的if语句里面是行不通的。我在那里放什么?

Sho*_*hoe 6

objectName函数不返回类名或变量名,而是返回使用 设置的实际对象名QObject::setObjectName。因此,您首先需要将其设置在表中:

myTable->setObjectName("myTable");
Run Code Online (Sandbox Code Playgroud)


Sin*_*all 2

你可以使用该accessibleName财产。将其设置为您需要的小部件,然后使用acessibleName()函数在您的周期中检查它。默认情况下它是一个空字符串,因此应该很容易找到您的小部件。

另一种选择是禁用所有小部件,然后直接启用您需要的小部件:

for( QWidget * w : widgets )
{
    w->setEnabled(false);
}

ui->myTable->setEnabled(true);
Run Code Online (Sandbox Code Playgroud)

或者,最后,您可以使用函数设置objectName属性setObjectName(),并像在代码中一样使用它。