Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Qt4 Qdevelop MOC  (Прочитано 1323 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fsakvador

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Qt4 Qdevelop MOC
« : 04 Июля 2011, 16:37:53 »
"Старый" как Qt похоже нубский вопрос, а ответ не нахожу.
Книга Макс Шлее пример на сигналы и слоты. Я слегка изменил код, чтобы все было в одном исходнике, вот так это выглядит:
#include <QtGui>
#include <QObject>

class Counter: public QObject
{
Q_OBJECT
private:
int m_nValue;
public:
Counter(Counter *counter = 0): QObject(counter), m_nValue(0){}
public slots:
void slotInc()
{
   emit counterChanged(++m_nValue);
if (m_nValue == 5) {
emit goodbye();
}
return;
}
signals:
void goodbye();
void counterChanged(int);
};



int main(int argc, char **argv)
{

QApplication app(argc, argv);
QLabel lbl("0");
QPushButton cmd("ADD");
Counter counter;

lbl.show();
cmd.show();

QObject::connect(&cmd, SIGNAL(clicked()), &counter, SLOT(slotInc()));
QObject::connect(&counter, SIGNAL(counterChanged(int)), &lbl,
                SLOT(setNum(int)));
QObject::connect(&counter, SIGNAL(goodbye()), &app, SLOT(quit()));
return app.exec();
}
---------------------------------------------
Вот что выдается при сборке
Сборка (make)...
make:
g++ -Wl,-O1 -o first main.o    -L/usr/lib -lQtGui -lQtCore -lpthread
Циклическая зависимость all <- first пропущена.
main.o: In function `main':
main.cpp:(.text+0xf9): undefined reference to `vtable for Counter'
main.cpp:(.text+0x1a2): undefined reference to `vtable for Counter'
main.cpp:(.text+0x1ff): undefined reference to `vtable for Counter'
collect2: ld returned 1 exit status
make: *** [first] Ошибка 1
------------------------------------------
Понятно, что некорректно работает (если вообще работает) MOC, но что с этим делать я так и не понял, уже второй день. Повторюсь это QDevelop, ОС Ubuntu 10.10.
« Последнее редактирование: 04 Июля 2011, 16:46:19 от RazrFalcon »

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Qt4 Qdevelop MOC
« Ответ #1 : 04 Июля 2011, 16:50:41 »
Используйте тег код!

Как то все странно написано...

И да, используйте только Qt Creator, проблем сразу станет меньше.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн fsakvador

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Qt4 Qdevelop MOC
« Ответ #2 : 04 Июля 2011, 16:56:24 »
Как то все странно написано...

Это Вы о коде или о моей манере излагать свои мысли? :) Код из учебника.

И да, используйте только Qt Creator, проблем сразу станет меньше.

Да я и буду использовать, моя задача сейчас просто разобраться с тем как писать GUI - первый раз пытаюсь, поэтому хочу хорошенько понять как все работает и в частности как в Qt происходит обработка макросов MOC'ом.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Qt4 Qdevelop MOC
« Ответ #3 : 04 Июля 2011, 17:09:35 »
Код из учебника.
С диска, который прилагается к книге?
Извините, я все еще учусь

Оффлайн fsakvador

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Qt4 Qdevelop MOC
« Ответ #4 : 04 Июля 2011, 17:20:54 »
Нет, руками переписал, я в djvu формате читаю, это было самое простое, но при этом приличное что находил в интернете по Qt. Листинги  2.8 - 2.10 в одном исходнике. Непосредственно также как в книге тоже пробовал собрать, выдается другая серия ошибок, но такого же типа:
undefined reference to 'vtable for ...'.
Про диск не знал кстати.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Qt4 Qdevelop MOC
« Ответ #5 : 04 Июля 2011, 17:24:53 »
Ну так в креторе сразу все понятно будет.  ;)
А код я такой странный не видел никогда, хотя кьют использую года 2-а.

Если нужно, могу свою реализацию сбросить.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Evil Beaver

  • Гость
Re: Qt4 Qdevelop MOC
« Ответ #6 : 04 Июля 2011, 18:30:23 »
А код я такой странный не видел никогда, хотя кьют использую года 2-а.

А что в нем странного?

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Qt4 Qdevelop MOC
« Ответ #7 : 04 Июля 2011, 19:13:31 »
В том, что обычно кьютешный код не так смотрится.
А исходников я прилично видел.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн ermak

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Qt4 Qdevelop MOC
« Ответ #8 : 04 Июля 2011, 19:38:35 »
В том, что обычно кьютешный код не так смотрится.
А исходников я прилично видел.
В примерах есть такой код. Например, для animatedtiles.

Скопировал код в файл counter.cpp, добавил в конец строку с #include "counter.moc". Запустил qmake -project, потом просто qmake и make. Все собралось.

Оффлайн fsakvador

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Qt4 Qdevelop MOC
« Ответ #9 : 04 Июля 2011, 20:09:39 »
Скопировал код в файл counter.cpp, добавил в конец строку с #include "counter.moc". Запустил qmake -project, потом просто qmake и make. Все собралось.
Большое спасибо, тоже собрал. Получается, что при выполнении make создается moc-файл, который нужно слинковать, а значит это указать в исходнике?

Оффлайн ermak

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Qt4 Qdevelop MOC
« Ответ #10 : 04 Июля 2011, 20:17:58 »
Получается, что при выполнении make создается moc-файл, который нужно слинковать, а значит это указать в исходнике?
Не совсем так.

При работе make cначала запускается moc и создает counter.moc, потом уже запускается компилятор (препроцессор) и при обработке counter.cpp содержимое counter.moc подставляется в конец файла.

 

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