使用常量字符串制作一个简单的Qt列表模型

时间:2015-07-19 19:14:25

标签: c++ qt

我正在尝试通过设计我自己的自定义列表模型来学习Qt的MVC模型,该模型只返回包含文本“Testing”的10行并在QListView中查看它。但是当我尝试运行它时,ListView中没有显示任何项目。我想我在这里误解了一些基本但却无法弄清楚它是什么。

该模型的来源是:

testmodel.h:

#define TESTMODEL_H

#include <QObject>
#include <QAbstractListModel>

class TestModel : public QAbstractListModel
{
    Q_OBJECT
public:
    explicit TestModel(QObject *parent = 0);
    int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
    QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
    QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;

signals:

public slots:
};

#endif // TESTMODEL_H

testmodel.cpp:

#include "testmodel.h"

TestModel::TestModel(QObject *parent) : QAbstractListModel(parent)
{

}

int TestModel::rowCount(const QModelIndex &parent) const
{
    if (parent.isValid()) return 0;
    return 10;
}

QVariant TestModel::data(const QModelIndex &index, int role) const
{
    return QString("Testing");
}

QModelIndex TestModel::sibling(int row, int column, const QModelIndex &idx) const
{
    if (!idx.isValid() || column != 0 || row >= 10)
        return QModelIndex();

    return createIndex(row, 0);
}

在主窗口的构造函数中:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    TestModel *tm = new TestModel(this);
    ui->listView->setModel(tm);
}

如果我改变这个而不是创建一个填充了字符串的QStringListModel,我可以看到里面的字符串。

0 个答案:

没有答案