Russian Qt Forum
Ноябрь 24, 2024, 02:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QAbstract*Model  (Прочитано 4063 раз)
hamlo
Гость
« : Сентябрь 08, 2009, 22:48 »

Пытаюсь разобраться с собственной реализации модели... но вот уж не задача...
Есть объект 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
« Последнее редактирование: Сентябрь 09, 2009, 07:18 от hamlo » Записан
hamlo
Гость
« Ответ #1 : Сентябрь 09, 2009, 07:29 »

Сутра просто сел за комп, запустил qtcreator и все собралось. Чертовщина какая то...
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Сентябрь 09, 2009, 23:54 »

скорее всего  не был вызван qmake после добавления макроса Q_OBJECT
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.