Пытаюсь разобраться с собственной реализации модели... но вот уж не задача...
Есть объект QListView.
Реализацию модели содрал отсюда
http://www.doc.crossplatform.ru/qt/4.3.2/model-view-creating-models.htmlКому лень по ссылке ходить model.h
#ifndef MODEL_H
#define MODEL_H
#include <QAbstractListModel>
class StringListModel : public QAbstractListModel
{
Q_OBJECT
public:
StringListModel(const QStringList &strings, QObject *parent=0)
: QAbstractListModel(parent), stringList(strings) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
private:
QStringList stringList;
};
#endif // MODEL_H
model.cpp
#include <QtGui>
#include "model.h"
int StringListModel::rowCount(const QModelIndex &parent) const
{
return stringList.count();
}
QVariant StringListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= stringList.size())
return QVariant();
if (role == Qt::DisplayRole)
return stringList.at(index.row());
else
return QVariant();
}
QVariant StringListModel::headerData(int section, Qt::Orientation orientation,
int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal)
return QString("Column %1").arg(section);
else
return QString("Row %1").arg(section);
}
Далее в конструкторе класса foo в foo.cpp
...
QStringList str;
str.append("asdsa");
str.append("asdasd");
StringListModel* model = new StringListModel(str);
listView->setModel(model);
...
И на выходе...
foo.o: In function `StringListModel::StringListModel(QStringList const&, QObject*)':
foo.cpp:(.text._ZN15StringListModelC1ERK11QStringListP7QObject[StringListModel::StringListModel(QStringList const&, QObject*)]+0x2b): undefined reference to `vtable for StringListModel'
collect2: выполнение ld завершилось с кодом возврата 1
Я уже почти сдался, даже не знаю куда копать.
ЗЫ
Qt Creator 1.2.1
Основан на Qt 4.5.2 (64-х битной)
Собран Jul 10 2009 в 16:16:34
Ревизия 59ebd3739d
В репах стабильной ветки Qt4.5.2 нет. Ставился с
qt-sdk-linux-x86_64-opensource-2009.03.1
С репы взял только qt-mysql для 4.5.0.
Ubuntu 9.04 Jaunty Jackalope
hammer@hammer-laptop:~/Soft/DBDesigner4$ uname -a
Linux hammer-laptop 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 19:25:34 UTC 2009 x86_64 GNU/Linux
hammer@hammer-laptop:~$ g++ -v
Используются внутренние спецификации.
Целевая архитектура: x86_64-linux-gnu
Параметры конфигурации: ../src/configure -v --with-pkgversion='Ubuntu 4.3.3-5ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Модель многопоточности: posix
gcc версия 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
hammer@hammer-laptop:~$ make -v
GNU Make 3.81
hammer@hammer-laptop:~/Programs/Qt/qtsdk-2009.03/qt/bin$ ./qmake -v
QMake version 2.01a
Using Qt version 4.5.2 in /home/hammer/Programs/Qt/qtsdk-2009.03/qt/li