非Qt工程使用Qt的信号槽机制
2015-09-21 21:56
381 查看
非Qt工程,使用Qt的信号槽机制,蛋疼不?反正我现在就是要做这样一件蛋疼的事。
要使用Qt的信号槽机制,下面是从Qt Assist里面关于 signal & slots 的一句介绍:
All classes that contain signals or slots must mention Q_OBJECT at the top of their declaration. They must also derive (directly or indirectly) from QObject.
翻译过来就是:所有包含信号与槽的类,必须引用 Q_OBJECT这个宏,然后需要从QObject继承过来。
这样得到我们要做事情的前2个步骤:
1. 从QObject继承。
2. 类中引用 Q_OBJECT这个宏。
我打算在A类里面发出一个信号,然后让B类接收。
做完这两件事情之后,编译不通过啊,怎么办?关于头文件,LIB文件的包含,这里不讲了。
这里引用到了QtCore/QObject这个头文件, Qt5Cored.lib(根据版本不同,名称不一样)这个库。
由于Q_OBJECT这个宏是由moc来处理的,还需要使用moc对我们的头文件进行编译。由于不是Qt工程,所以这个编译需要手动设置一下,具体参考下面
/article/8253573.html
使用moc编译完了之后,然后再讲moc_A.cpp, moc_B.cpp添加到工程中来即可。
测试代码:
测试通过。
所以,总结一下非Qt工程,使用Qt的信号槽的步骤:
1. 继承自QObject
2. 引用Q_OBJECT宏
3. 使用Qt的moc编译头文件,并将编译完成之后的moc_*.cpp文件添加到工程中来。
当然,这过程中,你引用到的Qt头文件,lib文件,都需要你手动指定好路径和依赖库。
要使用Qt的信号槽机制,下面是从Qt Assist里面关于 signal & slots 的一句介绍:
All classes that contain signals or slots must mention Q_OBJECT at the top of their declaration. They must also derive (directly or indirectly) from QObject.
翻译过来就是:所有包含信号与槽的类,必须引用 Q_OBJECT这个宏,然后需要从QObject继承过来。
这样得到我们要做事情的前2个步骤:
1. 从QObject继承。
2. 类中引用 Q_OBJECT这个宏。
我打算在A类里面发出一个信号,然后让B类接收。
//A.h的内容 #pragma once #include <QtCore/QObject> class A :public QObject { Q_OBJECT public: void sendA() { emit signalA(999);} signals: void signalA(int); };
//B.h 的内容 #pragma once #include <QtCore\QObject> class B : public QObject { Q_OBJECT public: B() : _receiveData(0) { } public slots: void receiveA(int v) { _receiveData = v; } public: int _receiveData; };
做完这两件事情之后,编译不通过啊,怎么办?关于头文件,LIB文件的包含,这里不讲了。
这里引用到了QtCore/QObject这个头文件, Qt5Cored.lib(根据版本不同,名称不一样)这个库。
由于Q_OBJECT这个宏是由moc来处理的,还需要使用moc对我们的头文件进行编译。由于不是Qt工程,所以这个编译需要手动设置一下,具体参考下面
/article/8253573.html
使用moc编译完了之后,然后再讲moc_A.cpp, moc_B.cpp添加到工程中来即可。
测试代码:
#include "A.h" #include "B.h" #include <assert.h> #include <QtCore/QObject> int main(int argc, char **argv) { A a; B b; QObject::connect(&a, SIGNAL(signalA(int)), &b, SLOT(receiveA(int))); a.sendA(); int data = b._receiveData; assert(data == 999); return 0; }
测试通过。
所以,总结一下非Qt工程,使用Qt的信号槽的步骤:
1. 继承自QObject
2. 引用Q_OBJECT宏
3. 使用Qt的moc编译头文件,并将编译完成之后的moc_*.cpp文件添加到工程中来。
当然,这过程中,你引用到的Qt头文件,lib文件,都需要你手动指定好路径和依赖库。
相关文章推荐
- QTbutton设置背景颜色和文字显示位置设置
- PyQt程序设置图标
- QTextCodec中的setCodecForTr等终于消失了 (Qt5)
- vi/qt creator/vc/vs下对齐代码的操作
- QT用API获得文件的版本信息
- Qt在windows与Mac OS中获取执行程序版本号
- qt使用记录
- 【QT】QT信号槽初实现
- Qt字符串区分大小写和全词匹配问题
- QT安装
- 在Qt Creator中配置QNX设备
- 安装QNX的Qt开发框架(QDF)
- 在Qt Creator中配置QNX编译工具链
- Qt getOpenFileName函数使用详解
- qt使用gsoap调用webservice接口
- Qt Creater error: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Ubuntu Server下Qt的MySql驱动问题
- ubuntu server开机运行Qt图形界面程序
- qt开发----小白的成长伊始
- Qt简略总结