C++ 选择“正确”的子项
在对话框窗体上有几个项目,其中我有一个QListView和QTreeView。C++ 选择“正确”的子项,c++,qt,C++,Qt,在对话框窗体上有几个项目,其中我有一个QListView和QTreeView。 我想在初始化此对话框期间将它们加载到QSet。最好的方法是什么?您可以循环浏览对话框的子项,尝试将它们强制转换到QabstratemView*并添加通过的子项: #include <QtGui> int main(int argc, char **argv) { QApplication app(argc, argv); QVBoxLayout *layout = new QVBoxLayou
我想在初始化此对话框期间将它们加载到QSet。最好的方法是什么?您可以循环浏览对话框的子项,尝试将它们强制转换到QabstratemView*并添加通过的子项:
#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();
}
以下可能适用于未选中的代码:
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);
}
}
它们是两种不同的类型,因此您总是会遭受某种形式的类型擦除。为什么要这样做?@cbamber85我想让这个对话框变得通用,因为如果我将来添加其他视图,它将自动检测并连接到模型,而无需我做任何事情。谢谢你的回答。我想我没有清楚地表达我想要什么。好的,我有一个对话。在这个对话框中,我有很多小部件,其中一些可能是视图类型,也可能是从qabstractemview派生的对象。我想在这个对话框的初始化过程中检测我有多少个,并将指向它们的指针放入QSet;