我想禁用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无法正常工作。我在那放什么

最佳答案

您可以使用accessibleName属性。将其设置为所需的小部件,然后使用acessibleName()函数在周期中对其进行检查。默认情况下,它是一个空字符串,因此查找小部件应该相当容易。

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

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

ui->myTable->setEnabled(true);

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

10-02 03:09
查看更多