Решено: Помогите найти ошибки - уже час ищу (QT4)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Решено: Помогите найти ошибки - уже час ищу

Сообщение Assuri »

У меня задача: написать GUI программу в которой будет кнопка выхода, кнопка добавления 5 [так сказать] балов и арею, в которой это количество балов будет показываться. Я абсолютный новичек в QT4, который изучает его по Туториалам программы assistant.

Помогите, пожалуйста, найти ошибки в коде и скажите: откуда такая ошибка при компиляции?
main.o: In function `MyWidget::MyWidget()':
main.cpp:(.text._ZN8MyWidgetC1Ev[MyWidget::MyWidget()]+0x21f): undefined reference to `vtable for NumberField'
main.cpp:(.text._ZN8MyWidgetC1Ev[MyWidget::MyWidget()]+0x229): undefined reference to `vtable for NumberField'


Код:

Код:

#include <QApplication> #include <QPushButton> #include <QGridLayout> #include <QPainter> #include <QWidget> #include <QString> #include <QFont> class NumberField : public QWidget { Q_OBJECT private: int num; protected: void paintEvent(QPaintEvent * event); signals: void numberChanged(int newNumber); public slots: void add() { num+=5; update(); emit numberChanged(num); } public: NumberField() { num = 0; setPalette(QPalette(QColor(200,200,200))); setAutoFillBackground(true); } void setDefaultValue(int n ) { num = n; } int number() const { return num; } }; void NumberField::paintEvent(QPaintEvent* /*event*/) { QPainter painter(this); painter.drawText(30,30,QString::fromLocal8Bit("Количество очков: ") + QString::number(num)); } class MyWidget : public QWidget { public: MyWidget() { QPushButton *addFive = new QPushButton(QString::fromLocal8Bit("Добавить 5 очков")); addFive->setFont(QFont("Times",20,QFont::Bold)); QPushButton *quit = new QPushButton(QString::fromLocal8Bit("Выход")); quit->setFont(QFont("Sans",16,QFont::Bold)); connect(quit,SIGNAL(clicked()),qApp,SLOT(quit())); NumberField *field = new NumberField; field->setDefaultValue(0); connect(addFive,SIGNAL(clicked()),field,SLOT(add())); QGridLayout *grid = new QGridLayout; grid->addWidget(addFive,1,0); grid->addWidget(quit,1,1); grid->addWidget(field,0,0,0,1); grid->setColumnStretch(1,10); setLayout(grid); } }; int main(int argc, char** argv) { QApplication app(argc,argv); MyWidget widget; widget.setGeometry(200,200,500,500); widget.show(); return app.exec(); }
Спасибо сказали:
Abaddon
Сообщения: 81
ОС: Gentoo 2006.1.x86_64

Re: Решено: Помогите найти ошибки - уже час ищу

Сообщение Abaddon »

-DooM- писал(а):
30.07.2007 13:13
У меня задача: написать GUI программу в которой будет кнопка выхода, кнопка добавления 5 [так сказать] балов и арею, в которой это количество балов будет показываться. Я абсолютный новичек в QT4, который изучает его по Туториалам программы assistant.

Помогите, пожалуйста, найти ошибки в коде и скажите: откуда такая ошибка при компиляции?

Ошибка заключается в том, что классы стоит размещать КАЖДЫЙ в своем заголовочном+сорсовом файле. После разделения проекта на нужное кол-во файлов все прекрасно скомпилируется.

Дело в том, что как только в классе появляется макрос Q_OBJECT, появляются некоторые функции, тела для которых генерирует moc-компилер, который, в свою очередь, проходит только по заголовочным файлам, игнорируя файлы исходников.
Base: Gentoo 2006.1.x86_64 on AMD64_X2-5200+/1024Mb/7300GS-256Mb/250Gb
Serv: Gentoo 2006.1.x86_32 on iCeleron-2.4/1024Mb/Geforce2MX400-64Mb/250Gb+60Gb
Note: Gentoo 2006.1.x86_32 on Transmeta-8800(Efficeon)/512Mb/(Trident-???)/40Gb
Gate: Gentoo 2005.1.x86_32 on AMD-K6.2-500/64Mb/forgot.../3.2Gb+6.4Gb+40Gb
Спасибо сказали:
Ответить