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错误)!
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VS2022使用Qt插件机制实现图像缩放功能需要完成以下步骤: 1. 配置Qt环境:在VS2022,需要先配置Qt环境,使其能够与VS2022进行集成。可以参考Qt官方文档或者其他相关文章进行配置。 2. 创建Qt插件项目:在VS2022创建一个Qt插件项目,选择“Qt Plug-in”项目类型,然后选择“C++库”作为库类型。在项目设置,选择“动态库”作为库类型,并选择你想要链接到插件Qt版本。 3. 实现图像缩放功能:在插件项目,实现图像缩放功能,并将其封装成一个类。你可以使用Qt提供的图像处理功能来实现图像缩放,例如使用QImage::scaled()函数对图像进行缩放,然后将这个函数封装在一个类。 4. 将类导出为插件:在插件项目的.pro文件,添加以下行: ``` QT += core gui TARGET = ImageScalerPlugin TEMPLATE = lib CONFIG += plugin HEADERS += ImageScaler.h SOURCES += ImageScaler.cpp ``` 在ImageScaler.h文件,将类声明为Q_OBJECT,并使用Q_PLUGIN_METADATA宏导出插件元数据,例如: ``` #include <QtPlugin> class ImageScaler : public QObject { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.ImageScalerPlugin") Q_INTERFACES(QObject) public: // ... }; ``` 5. 在VS2022使用插件:在VS2022项目,使用QPluginLoader类加载插件,并使用QObject::dynamicCast()函数将插件转换为ImageScaler类的实例。例如: ``` #include <QPluginLoader> QPluginLoader loader("ImageScalerPlugin"); QObject *plugin = loader.instance(); ImageScaler *scaler = qobject_cast<ImageScaler*>(plugin); ``` 6. 使用插件:现在你可以使用ImageScaler类的函数实现图像缩放功能了。例如: ``` QImage image("myimage.jpg"); QImage scaledImage = scaler->scaleImage(image, 0.5); ``` 以上步骤描述了如何使用Qt插件机制在VS2022实现图像缩放功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值