我想在我的Qt应用程序中禁用除一组选定的小部件之外的所有小部件。
我要做的是使用findChildren
迭代mainWindow的所有子项,并使用setEnabled(false)
禁用除“myTable”之外的所有生成的小部件。
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);
}
}
上述objectName()
语句中的 if
无效。我该放什么?
答案 0 :(得分:2)
objectName
函数不返回类名或变量名,但实际对象名你已设置为QObject::setObjectName
。因此,您首先需要在表格中设置:
myTable->setObjectName("myTable");
答案 1 :(得分:2)
您可以使用accessibleName
属性。为您需要的小部件设置它,然后使用acessibleName()
功能在您的周期中进行检查。默认情况下它是一个空字符串,所以找到你的小部件应该相当容易。
另一种方法是禁用所有小部件,然后直接启用您需要的小部件:
for( QWidget * w : widgets )
{
w->setEnabled(false);
}
ui->myTable->setEnabled(true);
或者,最后,您可以使用objectName
函数设置setObjectName()
属性,并像在代码中一样使用它。
答案 2 :(得分:0)
将此内容写在第一行上(从括号中删除引号):
QList<QWidget *> allWidgets = mainWindow->findChildren<QWidget *>();