【发布时间】:2010-08-03 16:11:49
【问题描述】:
我得到了一个xyz(代码是int,只是一个例子)的上帝给定的列表,粘在QList(大到可以移动到任何地方)。如何为此创建模型视图?我已经阅读了 Qt 文档,它告诉我,我必须重新实现 data、index、parent、rowCount、columnCount 函数。但是预处理器/编译器需要更多重新实现的功能吗?我已经阅读了我的 Qt Book 中的一章,但它也没有帮助。这是我破解的代码:
class XModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit XModel(QList<int> *valuelist, QObject *parent = 0);
virtual ~XModel();
int rowCount(const QModelIndex &) const;
int columnCount(const QModelIndex &) const;
QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &index) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
private:
QList<int>* blah;
signals:
public slots:
};
XModel::XModel(QList<int> *valuelist, QObject *parent) :
QAbstractListModel(parent),
blah(valuelist)
{
}
XModel::~XModel()
{
}
int XModel::rowCount(const QModelIndex &) const
{
return blah->size();
}
int XModel::columnCount(const QModelIndex &) const
{
return 1;
}
QModelIndex XModel::index(int row, int column, const QModelIndex &parent) const
{
return createIndex(row, column, (void)&(blah->at(row)));
}
QModelIndex XModel::parent(const QModelIndex &index) const
{
return createIndex(index->row(), index->column(), NULL);
}
QVariant XModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
return QVariant(blah->at(index.row()));
}
我什至必须使用QAbstractItemModel 还是QAbstractListModel 的工作方式完全相同?如何为模型提供实际数据的来源?这仅在data 函数内吗?请告诉我我做错了什么,我没有看到它并就如何正确地做到这一点提供建议,(好)howtos欢迎。
这是固定的,但是...
编辑:
Widget::Widget(QWidget *parent)
: QWidget(parent),
valuelist(),
xm(&valuelist) //xm = XModel
{
valuelist.append(1);
valuelist.append(2);
valuelist.append(3);
valuelist.append(4);
valuelist.append(5);
valuelist.append(6);
valuelist.append(7);
valuelist.append(8);
valuelist.append(9);
view = new QListView(this);
view->setModel(&xm);
//how to force the XModel to reread the QList`?
view->show();
}
【问题讨论】:
-
你能说得更具体一点,编译器错误吗?它说你没有实现什么功能?
-
我刚刚发现我使用了错误的查看器类,愚蠢:> 现在扩展问题..