带有QAbstractListModel的QListView显示一个空列表

时间:2013-02-27 05:18:23

标签: qt 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);

但这提出了一个问题,如果模型必须引用视图,模型/视图的独立性在哪里?

如果我想在两个不同的视图中使用此模型该怎么办?

1 个答案:

答案 0 :(得分:12)

只有当role = Qt :: DisplayRole时,您的方法数据才会返回“a”。否则,它会为每个角色返回“a”。

所以,添加一个简单的测试,它将起作用:

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