【问题标题】:Why doesn't my model show up in QListView?为什么我的模型没有出现在 QListView 中?
【发布时间】:2014-06-10 14:21:46
【问题描述】:

我正在尝试让一个简单的 QAbstractItemModel 显示在 QListView 中,但我有点挣扎。这是我的模型实现:

TestModel::TestModel(QObject *parent) : QAbstractItemModel(parent)
{
}

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

    return QVariant();
}

Qt::ItemFlags TestModel::flags(const QModelIndex &index) const
{
    return Qt::ItemIsSelectable |  Qt::ItemIsEditable | Qt::ItemIsEnabled;
}

QVariant TestModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if(role == Qt::DisplayRole)
    {
        return QVariant("BING");
    }

    return QVariant();
}

QModelIndex TestModel::index(int row, int column, const QModelIndex &parent) const
{
    return createIndex(row, column);
}

QModelIndex TestModel::parent(const QModelIndex &index) const
{
    return createIndex(0, 0);
}

int TestModel::rowCount(const QModelIndex &parent) const
{
    return 1;
}

int TestModel::columnCount(const QModelIndex &parent) const
{
    return 1;
}

如果我将 QListView 的模型设置为上述模型的实例,则什么也不会显示。但是,如果我改用 QTableView,那么它会按预期填充。

我需要做些什么才能让这个简单的示例与 QListView 一起使用?

谢谢, 艾伦

【问题讨论】:

  • 我不知道这是否会导致问题,但对于没有父索引的索引,parent() 应该返回无效的QModelIndex(使用默认构造函数创建)。

标签: c++ qt model qlistview qabstractitemmodel


【解决方案1】:

列表模型没有父层次结构。 因此,parent 方法应实现为,

QModelIndex TestModel::parent(const QModelIndex &index) const
{
    return QModelIndex();
}

【讨论】:

  • 非常感谢。这确实是问题所在。
猜你喜欢
  • 2017-02-20
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2021-07-30
  • 2015-09-04
相关资源
最近更新 更多