C++ 定义main.cpp内的信号和插槽
我在main.cpp中用自己的类编写了一个小程序。代码如下:C++ 定义main.cpp内的信号和插槽,c++,qt,moc,C++,Qt,Moc,我在main.cpp中用自己的类编写了一个小程序。代码如下: #include <QApplication> #include <QPushButton> #include <QLabel> class MyWidget : public QWidget { //Q_OBJECT public: MyWidget(QWidget* parent = 0); QLabel* label; QString string; sig
#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();
}
我能应付吗?问题出在哪里?Qt中的信号和插槽通过moc:meta-object编译器进行管理。基本上,MOC为包含QQObjor宏的每个类生成额外的C++代码,以便有效地实现信号和槽机制。然后将附加代码链接到原始类声明 这里的问题是您的类是在main.cpp中声明的:这与moc如何处理您的代码相冲突。您应该在单独的标题中声明类
编辑:正如海德所指出的,另一种方法是在cpp中包含moc生成的文件:只需在cpp源文件中添加一行
#include“main.moc”
更多信息:
MyWidget::setTextLabel
插槽。还要注意,您的MyWidget
构造函数不会初始化标签
成员,这将导致未定义的行为。请参阅:不需要,您不需要.h文件。请参阅问题下的链接(并随时更新您的答案)。
undefined reference to `vtable for MyWidget'
........................................
collect2: error: ld returned 1 exit status
make: *** [mywidget] Error 1