所以我终于到了可以在 ListView 上选择多个项目的地步:
ListView {
id: lv_stuffs
horizontalAlignment: HorizontalAlignment.Fill
dataModel: _app.personDataModel //REFERENCE 1
multiSelectAction: MultiSelectActionItem {
}
multiSelectHandler {
actions: [
// Add the actions that should appear on the context menu
// when multiple selection mode is enabled
ActionItem {
title: "Search for stuffs"
onTriggered: {
_app.search(lv_stuffs.selectionList());
}
...
我正在将此选择列表发送到我的搜索方法:
void ApplicationUI::search(const QVariantList &list)
{
alert(QString("%1 items selected").arg(list.length()));
alert(((Person)list.at(0)).firstName);//<---- THIS IS THE PROBLEM
}
我试图从最初绑定到该项目的 GroupedDataModel 中获取“Person”对象......我不得不说我有点难过。通过数据库类中的简单插入方法将人员添加到 personDataModel:
personDataModel->insert(person);
然后将项目绑定到 QML 中的 ListView(上面的参考 1)。绑定一切正常,项目在列表中可见。我不知道现在如何从我通过 MultiSelectionMethod 发送的 QVariantList 中提取这些“Person”对象。
我的人班:
Person::Person(QObject *parent) : QObject(parent){}
Person::Person(const QString &id, const QString &firstname, const QString &lastname, QObject *parent)
: QObject(parent)
, m_id(id)
, m_firstName(firstname)
, m_lastName(lastname)
{
}
QString Person::customerID() const
{
return m_id;
}
QString Person::firstName() const
{
return m_firstName;
}
QString Person::lastName() const
{
return m_lastName;
}
void Person::setCustomerID(const QString &newId)
{
if (newId != m_id) {
m_id = newId;
emit customerIDChanged(newId);
}
}
void Person::setFirstName(const QString &newName)
{
if (newName != m_firstName) {
m_firstName = newName;
emit firstNameChanged(newName);
}
}
void Person::setLastName(const QString &newName)
{
if (newName != m_lastName) {
m_lastName = newName;
emit lastNameChanged(newName);
}
}
我一直在痛苦地遵循本教程,https://developer.blackberry.com/cascades/documentation/ui/lists/list_view_selection.html,它方便地停在我的问题开始的地方。