Я написал небольшую программу с собственным классом в main.cpp. Здесь код:Q_OBJECT или нет Q_OBJECT
#include <QApplication>
#include <QPushButton>
#include <QLabel>
class MyWidget : public QWidget {
//Q_OBJECT
public:
MyWidget(QWidget* parent = 0);
QLabel* label;
QString string;
signals:
public slots:
void setTextLabel();
};
void MyWidget::setTextLabel() {
label->setText("Test");
}
MyWidget::MyWidget(QWidget* parent)
: QWidget(parent) {
}
int main(int argc, char** argv) {
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
похоже работа, но не «полностью». Мой слот не работает. Полагаю, я должен поставить Q_OBJECT. НО, делая это, у меня есть список ошибок, например:
undefined reference to `vtable for MyWidget'
........................................
collect2: error: ld returned 1 exit status
make: *** [mywidget] Error 1
Я могу это сделать? Где проблема?
Можете ли вы объяснить, что вы подразумеваете под словом «Мой слот не работает»? В приведенном выше примере слот 'MyWidget :: setTextLabel' фактически не используется. Также обратите внимание, что ваш конструктор 'MyWidget' не инициализирует элемент' label', который вызывает неопределенное поведение. –
Смотрите это: http://stackoverflow.com/questions/34928933/why-is-important-to-include-moc-file-at-end-of-a-qt-source-code-file – hyde