选择“正确”的孩子

时间:2011-11-23 13:22:27

标签: c++ qt

在一个对话框表单上有一些项目,其中我有一个QListView和QTreeView 我想在初始化此对话框期间将它们加载到QSet。最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以遍历对话框的子项,尝试将它们转换为QAbstractItemView*并添加通过的对象:

#include <QtGui>

int main(int argc, char **argv) {
  QApplication app(argc, argv);

  QVBoxLayout *layout = new QVBoxLayout;
  layout->addWidget(new QLabel("Hello!"));
  layout->addWidget(new QListView);
  layout->addWidget(new QTreeView);
  layout->addWidget(new QPushButton("Click me!"));

  QDialog d;
  d.setLayout(layout);
  d.show();

  QSet<QAbstractItemView*> set;
  for (int i = 0; i < d.children().size(); ++i) {
    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(d.children().at(i));
    if (view) {
      set << view;
    }
  }

  qDebug() << set.size();

  return app.exec();
}

答案 1 :(得分:0)

以下内容可能对你有用(代码未经检查):

QSet<QAbstractItemView*> childViews;
for (QObjectList::iterator it = children().begin(); it != children().end(); ++it)
{
    QAbstractItemView* view = qobject_cast<QAbstractItemView*>(*it);
    if (view != 0)
    {
        childViews.insert(view);
    }
}