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

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

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

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

最佳答案

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

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

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

关于qt - 带有 QAbstractListModel 的 QListView 显示一个空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15104711/

相关文章:

c++ - 手动调整窗口大小后 QGraphicsScene 宽度/高度没有改变

c++ - 删除目录中的所有文件

c++ - QListView 中的 QT 超链接

python - 使用 Qlistview 设置 QStandarItemModel 中项目的选择

python - Qt : setData method in a QAbstractItemModel

c++ - QList 作为函数参数 - 链接错误 - LNK2019

c++ - 调整 QDockWidget 的大小

python - 从 QListView 中正确删除多选行

qt - 按 QML ListView 中的角色对 QAbstractListModel 派生模型进行排序

python - 使用文件监视通过 PyQt4 刷新日志查看器