2013-06-15 4 views
0

Так что я НАКОНЕЦ добрался до места, где я могу выбрать несколько элементов на ListView:итерация BlackBerry через список SelectedItems

 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, которая первоначально привязана к элементу ... и я должен сказать, что я более чем немного тупой. Человек добавляется к personDataModel с помощью простого метода вставки в классе базы данных:

personDataModel->insert(person); 

и элементы затем привязан к ListView в QML (ссылка 1) выше. Связывание прекрасное, и элементы видны в списке. Я не могу понять, как извлечь эти объекты «Person» из 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

Возможно, вы ищете функцию значения?

void ApplicationUI::search(const QVariantList &list) 
{ 
    alert(QString("%1 items selected").arg(list.length())); 
    alert(((Person)list.value(0)).firstName); 
} 

(синтаксис извлечения значения ПгвЬЫата не может быть прямо там, зависит от реализации)

+0

Спасибо, но это не работает - я получил до сих пор as: QVariant nlist = personDataModel-> data (list.at (0) .toList()); qDebug() << "Список:" << nlist; Результаты в Список: QVariant (QObject *, Person (0x857c310)) Но я не могу получить элементы из QVariant –

+0

Используйте функцию() значение на QVariant у вас есть. Это должно дать вам сдержанный человек. – TheSmurf

+0

Что ЗВУКИ правы, но значение - это шаблон - поэтому я должен сказать что-то вроде QVariant tlist = personDataModel-> data (list.at (0) .toList()); Person * selectedPeople = tlist.value (); И я получаю сообщение об ошибке: «« qt_metatype_id »не является членом« QMetaTypeId »« Теперь, прежде чем вы просто скажете об этой ошибке и дадите мне результаты - я понятия не имею, куда поместить эти строки кода в класс def (возможно, даже в классе def) - может быть, даже не те строки кода. Почему, черт возьми, это так сложно? –

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());

Смежные вопросы