Почему моя модель не отображается в QListView?

Я пытаюсь заставить простой 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?

Спасибо, Алан


person Alan Spark    schedule 09.06.2014    source источник
comment
Я не знаю, вызывает ли это проблему, но для индексов, у которых нет родителя, parent() должен возвращать недопустимый QModelIndex (созданный с помощью конструктора по умолчанию).   -  person Leiaz    schedule 09.06.2014


Ответы (1)


Модель списка не имеет родительской иерархии. Следовательно, метод parent должен быть реализован как

QModelIndex TestModel::parent(const QModelIndex &index) const
{
    return QModelIndex();
}
person liuyi.luo    schedule 10.06.2014
comment
Большое спасибо. Это действительно было проблемой. - person Alan Spark; 10.06.2014