我正在使用Qt for Symbian . 在我的mainwindow.cpp中,我有一个QPushButton和一个QListWidget . 按下按钮将显示一个Qml页面,其中包含每行中带有复选框的列表视图 . 我可以选中或取消选中这些项目 . 当我按下后退工具按钮时,所选项目将列在主窗口的QListWidget中 .
当我重新打开Qml页面(即再次按下QPushButton)时,我还需要检索包含所选项目的列表视图 . 如何实现这一目标 . 在qml中有类似saveState()或restoreState()的东西吗?如果没有,有没有其他可能的方法来实现这一目标?
编辑:
这是我的代码:
contacts.qml
ListView {
id: listView
anchors.top: statusBar.bottom
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: toolBar.top
clip: true
model: stdModel
//delegate: contactListDelegate
}
mainwindow.cpp
void MainWindow::createList()
{
QContactManager *contactManager = new QContactManager("symbian");
QList<QContactLocalId> contactIds = contactManager->contactIds();
QContact currContact;
QStandardItemModel *model = new QStandardItemModel();
QImage m_thumbnail;
foreach (const QContactLocalId& id, contactIds)
{
currContact = contactManager->contact(id);
if(currContact.type() == QContactType::TypeContact)
{
QContactThumbnail avatar(currContact.detail(QContactThumbnail::DefinitionName));
m_thumbnail = avatar.thumbnail();
QStandardItem *items = new QStandardItem();
//items->setData(currContact.displayLabel(), Qt::DisplayRole);
//items->setData(QPixmap::fromImage(m_thumbnail), Qt::DecorationRole);
items->setText(currContact.displayLabel());
if(m_thumbnail.isNull())
{
items->setIcon(contactIcon);
}
else
{
items->setIcon(QPixmap::fromImage(m_thumbnail));
}
model->appendRow(items);
}
}
}
void MainWindow::viewQml()
{
QDeclarativeView *qmlView = new QDeclarativeView;
qmlView->setSource(QUrl("qrc:/contacts.qml"));
qmlView->rootContext()->setContextProperty("stdModel", model);
qmlView->show();
}
1 回答
如果您使用QML ContactModel作为模型,那么您应该创建一个单独的C模型并将状态保存在此模型中 .
c类的例子:
您需要实例化它并提供给QML .
然后最后一件事是从QML中使用它:
在代理的MouseArea中执行以下操作:
最后一件事是将其加载到复选框:
请注意,他只是您需要做的主要事情,可能无法立即编译 . 如果您还有问题,请告诉我 . 希望它有所帮助 .