我在向导页面中有一个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的构造函数中,您必须像这样调用qRegisterMetaTyperegisterField:
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*>()从向导的任何位置访问所选项目。

希望这是您所期望的。

10-06 11:55