я получил годовой список xyz
(код говорит, что int, просто пример), склеенный в QList
(чтобы переместиться куда угодно). Как я могу создать модель для этого? Я уже прочитал документацию Qt, в которой говорится, что я должен переопределить функции data
, index
, parent
, rowCount
, columnCount
. Но препроцессор / компилятор требует больше переопределенных функций? Я уже прочитал главу в моей книге Qt, но это тоже не помогло. Вот мой взломанный код:
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
? Пожалуйста, скажите мне, что я делаю неправильно, я не вижу этого и даю советы, как это сделать правильно, (хорошо), как добро пожаловать.
Это исправлено, но ...
EDIT:
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();
}