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语句里面是行不通的。我在那里放什么?
该objectName函数不返回类名或变量名,而是返回您使用 设置的实际对象名QObject::setObjectName。因此,您首先需要将其设置在表中:
myTable->setObjectName("myTable");
Run Code Online (Sandbox Code Playgroud)
你可以使用该accessibleName财产。将其设置为您需要的小部件,然后使用acessibleName()函数在您的周期中检查它。默认情况下它是一个空字符串,因此应该很容易找到您的小部件。
另一种选择是禁用所有小部件,然后直接启用您需要的小部件:
for( QWidget * w : widgets )
{
w->setEnabled(false);
}
ui->myTable->setEnabled(true);
Run Code Online (Sandbox Code Playgroud)
或者,最后,您可以使用函数设置objectName属性setObjectName(),并像在代码中一样使用它。