5

我创建了一个非常简单的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);

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

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

4

1 回答 1

12

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

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

  QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const
{
    if ( role == Qt::DisplayRole ) {
      return "a";
    }
    return QVariant();
}
于 2013-02-27T09:05:35.877 回答