2013-02-27 2 views
4

Я создал очень простой пример QListView с пользовательским QAbstractListModel. Отображается QListView, но он пуст.QListView с QAbstractListModel показывает пустой список

Что я делаю неправильно?

Код:

#include <QListView> 
#include <QAbstractListModel> 
#include <QApplication> 

class DataModel: public QAbstractListModel 
{ 
public: 
    DataModel() : QAbstractListModel() {} 
    int rowCount(const QModelIndex & parent = QModelIndex()) const { return 2; } 
    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const 
    { 
     return "a"; 
    } 
}; 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv, true); 
    QListView *lv = new QListView(); 
    DataModel d; 
    lv->setModel(&d); 
    lv->show(); 
    app.setMainWidget(lv); 
    app.exec(); 
} 

Спасибо!

Исправление к предыдущему коду, чтобы установить родитель модели на QListView:

DataModel d(lv); 

Но возникает вопрос, где находится модель/представление независимости, если модель должна иметь ссылку на вид?

Что делать, если я хочу использовать эту модель в двух разных точках зрения?

ответ

9

Данные ваших методов должны возвращать «а», только если role = Qt :: DisplayRole. В противном случае он возвращает «a» для каждой роли.

Итак, добавьте простой тест, и он будет работать:

QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const 
{ 
    if (role == Qt::DisplayRole) { 
     return "a"; 
    } 
    return QVariant(); 
} 
+0

Done, но он все еще не показывает пункт :( –

+1

Важно, чтобы данные() возвращает недействительный QVariant() Check. если вы не забыли «вернуть QVariant()» в конце. –

+0

Он возвращает QVariant(). Я решил это, хотя я все еще думаю, что что-то не так. Посмотрите на издание на исходный пост. –