"Старый" как 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.