我正在尝试通过设计我自己的自定义列表模型来学习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,我可以看到里面的字符串。