VS2017中QT插件的Config配置
文章目录
Qt Creator配置文件
我们日常在使用QT的时候,经常会用到Qt Creator,比如你想在程序中运用到C++11的特性
你就需要在pro文件中加入下面这句话
这样一来,我们就可以使用诸如,lamda函数等功能。在我理解里,这个应该就是告知c++的预处理器,我们要使用这个功能。
编译器运行机制
具体关于程序如何运行。我们举最简单hello world程序为例,如下图所示:
简单来说,上图由预处理器、编译器、汇编器、链接器构成了c++的编译系统。
- 预处理器:主要处理程序中#开头的语句,如#include ,#define,这些就是要求程序提前需要知道的内容,由预处理器处理翻译成hello.i的文件。
- 编译器:主要负责转换成底层汇编器能够理解的语言,因为c++属于高级语言,就相当于一个外交官将别国语言翻译成自家的语言,最终翻译成一系列的汇编语言,以hello.s文件表示。
- 汇编器:主要处理hello.s中的汇编语言代码,并将其翻译成机器级的代码(应该是二进制0,1运算),这里就是hello.o文件,具体的功能就是重新定位目标。
- 链接器:主要就是处理hello.o文件,因为包含了printf函数,其需要用到预处理器中生成printf.o的文件中,换言之,就是hello.o依赖于printf.o文件,需要链接起来以表示这种关系,这份工作由链接器完成。
这样,我们就基本懂得了c++编译系统原理。
遇到的问题
言归正传,我们之所以介绍前面的内容。因为,前面提到的Config配置属于预处理定义中的内容。
而,我们的问题是:由于Qt自身定义的signals,slots和emit关键字会与第三方库如Boost冲突,需要把下面一行加到你的项目文件(.pro)
CONFIG += no_keywords
这行命令式告诉Qt在使用第三方类库如boost时不定义signals,slots和emit关键字。在no_keywords标志下继续使用Qt的信号与槽,只要简单替换源代码中Qt的moc关键字为相对应的Qt宏
- SIGNALS-> Q_SIGNAL,
- SLOTS ->Q_SLOT
- emit ->Q_EMIT
当然,因为我们的项目是在vs中使用QT插件,就没有pro文件!那怎么办呢?回到之前提到的,由于他是个预处理的定义,所以可以在VS项目属性中增加QT_NO_KEYWORDS,具体如下图所示
哒哒哒,再将关键字替换即可
这样编译器就不会报错啦(一般为C2334错误)!