所以我最终已经达到了可以在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
}
我正在努力获得&#34; Person&#34;最初绑定到项目的GroupedDataModel中的对象...我不得不说我不仅仅是有点难过。通过数据库类中的简单插入方法将此人添加到personDataModel:
personDataModel->insert(person);
然后将项目绑定到QML中的ListView(上面的参考文献1)。绑定完全正常,项目在列表中可见。我无法弄清楚的是现在如何提取这些&#34; Person&#34; QVariantList之外的对象我是通过MultiSelectionMethod发送的。
我的班级:
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一直非常轻松,这可以方便地停在我的问题开始的地方。
答案 0 :(得分:0)
您是否正在寻找价值功能?
void ApplicationUI::search(const QVariantList &list)
{
alert(QString("%1 items selected").arg(list.length()));
alert(((Person)list.value(0)).firstName);
}
(firstName值的提取语法可能不正确,取决于您的实现)
答案 1 :(得分:0)
您的Person
课程将存储在QVariant
中。要做到这一点,Qt必须生成一些特定于您的类的代码。可以通过在类定义之后将其添加到头文件中来完成,例如:Q_DECLARE_METATYPE(Person)
。您可以在此处详细了解:http://qt-project.org/doc/qt-4.8/qmetatype.html#Q_DECLARE_METATYPE
现在,要将值提取为Person
对象,您可以使用QVariant::value<T>()
(http://qt-project.org/doc/qt-4.8/qvariant.html#value):
alert(list.at(0).value<Person>().firstName());