QListView с QAbstractListModel показывает пустой список

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

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

Код:

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

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

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


person Santilín    schedule 27.02.2013    source источник


Ответы (1)


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

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

  QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const
{
    if ( role == Qt::DisplayRole ) {
      return "a";
    }
    return QVariant();
}
person Dimitry Ernot    schedule 27.02.2013
comment
Важно, что data() возвращает неверный QVariant(). Проверьте, не забыли ли вы вернуть QVariant() в конце. - person Dimitry Ernot; 27.02.2013
comment
Он возвращает QVariant(). Я решил это, хотя я все еще думаю, что что-то не так. Посмотрите редакцию к исходному посту. - person Santilín; 28.02.2013