Выбор «правильного» ребенка - PullRequest
0 голосов
/ 23 ноября 2011

в диалоговой форме есть несколько элементов, среди них у меня есть QListView и QTreeView.
Я хотел бы загрузить их в QSet во время инициализации этого диалога. Какой лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2011

Для вас может работать следующее (код не проверен):

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);
    }
}
0 голосов
/ 23 ноября 2011

Вы можете перебрать дочерние элементы диалога, попытаться привести их к 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...