从QWidget获取objectname(从Qt Designer中可以看到)?

时间:2013-11-26 05:46:40

标签: c++ qt qwidget qtgui qobject

我想在我的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无效。我该放什么?

3 个答案:

答案 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 *>();