我在向导页面中有一个QListView。有几个条目,并且多个选择处于 Activity 状态。单击“下一步”按钮时,我希望所选项目被注册为字段。
可能吗?如果导致注册字段无法工作,请connect()创建一个模型索引,
对模型行进行迭代在Wizardpage:initializePage()中不起作用。
有什么建议么?
谢谢。
最佳答案
这可能不是最好的解决方案,但效果很好:
将一个属性添加到包含QListView
的向导页面,并使其返回指向selectionmodel的指针。例如。像这样:
class ListPage : public QWizardPage
{
Q_OBJECT
Q_PROPERTY(QItemSelectionModel* selectionModel READ selectionModel)
public:
ListPage(QWidget * parent = NULL);
QItemSelectionModel * selectionModel(void)
{
return listView->selectionModel();
};
private:
QListView *listView;
};
Q_DECLARE_METATYPE(QItemSelectionModel*);
然后,在ListPage的构造函数中,您必须像这样调用
qRegisterMetaType
和registerField
:ListPage::ListPage(QWidget * parent) : QWizardPage(parent)
{
...
listView = new QListView(this);
listView->setSelectionMode(QAbstractItemView::MultiSelection);
listView->setModel(model);
qRegisterMetaType("QItemSelectionModel*");
registerField("listViewSelection", this, "selectionModel");
...
}
现在,您可以通过调用
field("listViewSelection").value<QItemSelectionModel*>()
从向导的任何位置访问所选项目。希望这是您所期望的。