在QList中获取所有QLabel表单UI的正确方法是什么?

时间:2014-08-09 11:35:58

标签: c++ qt qlabel qlist

QList<QLabel> labelList;

foreach (QLabel lbl, ui)
{
    labelList.append(lbl);
}

我想在QList中添加所有QLabel,上面代码生成错误,请帮忙

2 个答案:

答案 0 :(得分:5)

您可以使用QList<T> QObject::findChildren ( const QString & name = QString() )获取指向子窗口小部件的指针列表。如果ui属于QMainWindow,则可以通过以下方式完成:

QList<QLabel *> list = ui->centralWidget->findChildren<QLabel *>();

要查找非QMainWindow容器的子项,例如QDialogQWidget,请使用:

QList<QLabel *> list = this->findChildren<QLabel *>();

现在您可以遍历列表,如:

foreach(QLabel *l, list)
{
  ...
}

或者,在C ++ 11中:

for(auto l : list)
{
  ...
}

答案 1 :(得分:3)

findChildren应该这样做:尝试

QList<QLabel*> labelList;  // note the pointer!

labelList = findChildren<QLabel*>();

在QWidget派生对象中执行