在main.cpp中定义信号和插槽
Define signals and slots inside main.cpp
我在main.cpp中用自己的类编写了一个小程序
#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
我能搞定吗?问题出在哪里?
Qt中的信号和插槽通过moc:meta对象编译器进行管理。基本上,moc为包含Q_OBJECT宏的每个类生成额外的C++代码,以便有效地实现信号和时隙机制。然后将附加代码链接到原始类声明。
这里的问题是你的类是在main.cpp中声明的:这与moc如何处理你的代码相冲突。您应该在单独的头中声明您的类。
更多关于moc 的信息
编辑:正如hyde所指出的,另一种选择是在cpp中包含moc生成的文件:为什么在Qt源代码文件的末尾包含".moc"文件很重要?
只需将行#include"main.moc"
附加到cpp源文件就足够了。
更多信息:
- 为什么重要的是包括";。moc";Qt源代码文件末尾的文件
相关文章:
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt moveToThread,带有参数的信号/插槽
- moc 文件中缺少信号插槽
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 信号/插槽多线程 Qt
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qimage没有通过信号插槽QT
- 使用 Qt5 的新信号/插槽实现向滑块发出信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- 信号/插槽基类多继承
- 在QT C 中使用QMOVIE和信号/插槽之间在GIF中导航
- 在 for 循环中使用 lambda 函数连接信号插槽
- 不同类别的 2 个对象之间的信号/插槽
- 如何正确使用qt的信号/插槽系统
- Qt信号插槽视觉工作室:似乎未连接
- QACTION信号插槽中的无形UI
- Qt-连接触发动作中的信号/插槽
- Qt 信号插槽类范围类型
- 信号/插槽 Qt5 C++