Qt界面开发纪实:Qt5 VS2017配置 Qt多线程实时刷新界面(QT C++ MSVC MinGW )(1)

14 篇文章 1 订阅
7 篇文章 0 订阅

Qt界面开发纪实:Qt5 VS2017配置 Qt多线程实时刷新界面(QT C++ MSVC MinGW )(1)

上一篇博客 https://blog.csdn.net/TiffanyXYf/article/details/99685835 可以算是粗略地记录了一下开发过程中踩到的坑,但是终究不够详细,对于新手来说参考意义不大,故在此详细介绍在开发过程中走的每一步,方便自己回顾,也方便新手参考。

开发工具,开发语言以及其它条件

根据甲方爸爸的要求,我们需要设计一个能够被主界面调用的子界面。由于他们的主界面是Qt做的,要求我们的开发环境也需要是Qt的;开发语言为C++。整个界面需要完成的功能包括:1.使用工业相机采集图片;2.对采集到的图片进行处理;3.根据主控命令(也就是主界面)的指令返回图片处理的结果;4.需要能够实时刷新或者以0.2s每次刷新界面;5.需要支持调试,调试内容较多,这里不做过多讲述。
所以我们的界面开发需要具备的条件有三个:1.Qt;2.C++; 3.工业相机。

开发工具的配置

在接手这项工作之前,博主没有接触过Qt,也没有用过C++进行过界面开发的工作,加上对VS稍微有一点熟悉,就听从师姐的建议在VS上集成Qt的开发工具,而在VS上进行开发(VS2017)。但是VS有一点比较麻烦,就是选择的Qt编译器必须是MSVC的,而不支持MinGW。博主在这方面吃了亏。(具体情况和工业相机的SDK有关,详情也可以查看上一篇博客)。总之,使用工业相机的C语言接口可以在VS上开发Qt界面,头文件和源文件都可以在直接在Qt上使用MingW编译。
如何配置VS+Qt
首先在VS的拓展和更新处查找Qt:工具==》拓展和更新。直接搜索下载就可以,我这里是已经安装好了。下载完成后,VS的菜单栏会多处一个Qt的菜单。
在这里插入图片描述
在这里插入图片描述
上述工作进行的过程中,安装Qt。和安装一般的软件一样,只有一点需要注意,就是选择需要的编译器。我直接选了MSVC和MinGW,32位和64位共四种。安装即可。

Qt安装好之后,为VS的“Qt VS Tools”设置编译器:点击Qt VS Tools ==》 最下方Qt Options ==》选择你要使用的编译器(如图,点击Add后直接从你的Qt安装目录中选定,选到如图所示的目录即可,VS记得选择MSVC的编译器)选择完成后就可以可以使用了。
在这里插入图片描述
在这里插入图片描述

新建工程
新建Qt GUI Application即可。
在这里插入图片描述
这个过程中可能会出现的坑:Qt VS Tools这里只显示Qt version 3.几.几……,没有所谓的选择编译器版本这些选项这个时候需要更新VS。 划重点,这里需要更新VS

如何实时刷新界面

信号槽机制+多线程实现界面刷新
信号和槽函数
信号和槽函数是Qt具备特色的机制。Qt通过信号函数向系统中发出特定信号,如果该信号没有特定的槽,则不会触发任何系统操作;如果有相应的槽函数与之连接,该特定信号发出后,与之对应的槽函数就会被执行。Qt界面中几乎所有与界面的交互都可以使用信号与槽完成。
把信号与槽连接起来有两种方式:1.直接再Qt界面上编辑,2.在自己的代码中将其连接
这两种方式各自有自己的适用范围:一般情况属于同一个UI的操作,可以直接在Qt界面上进行编辑,方便快捷;而属于不同的UI的信号与槽就可能需要手动绑定了。
在UI界面上点击如下菜单,进入信号与槽的编辑界面,在这里可以随意对UI中的控件添加信号与槽

在这里插入图片描述

点击想要编辑的控件==》下拉鼠标就会出现信号与槽的编辑界面,左边是信号,右边是槽,直接配对即可。
在这里插入图片描述
而手动配对:定义信号函数+槽函数+配对
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述的信号与槽属于不同的类,所以编辑的时候无法直接在UI上直接指定绑定关系。通过QObject::connect()可实现绑定。
发信号的时候直接 emit +你想的发的信号函数就可以了。(比如 emit sing_video(img),其中img是一个QImage的类型的变量)

多线程在实时刷新界面发挥的作用?
界面的显示本身是一个事件循环,也就是维持界面本身占用了一个线程,而我们没有办法做别的事情。也就是说如果没有多线程的话,这个程序会等你把所有的别的代码执行完,再显示界面。我的界面刚开始就是这样,运行一次就只能显示一张图片。
多线程的作用就是将采集图像(+图像处理)与图像显示分离开来。显示界面与图片处理互不干扰,而界面更新则依靠信号与槽。 开辟新的线程采集图片,采集到图片就发出一个信号,这个信号作用于一个对应的槽函数,这个槽函数实现对界面的更改。

Qt中开辟多线程十分简易,只要继承Qt中的Qthread就可以实现一个多线程的类,如图:
在这里插入图片描述
你想在子线程中实现的操作可以直接重写 void run (),线程启动时就会执行run函数中的操作。

如何启动
在UI类中声明这个线程的对象,在UI类的构造函数中把该对应的信号与槽对应好,然后启动线程即可。一般子线程中会写一个while循环来实现这个线程一直执行,并且不停地发信号,退出时打破循环
在UI类中声明线程对象
UI类的构造函数中启动线程
结束线程的时候,注意指针操作:
在这里插入图片描述

交换相机

前提情况:四个线程并发运行,分别操作不同的相机(采集图像、图像处理,显示处理结果)。在这种情况下我们需要交换图像显示的顺序。由于每个线程对应的显示框是一定的,所以这里值需要交换相机就可以了。为了简单起见,相机交换时会调用

thread->quit();
thread->wait();

交换完毕再调用

thread->start();

从而将线程重新启动。
而启动的线程的个数是和相机个数一致,弃用的相机对应的线程也会重新启动,但是由于弃用相机的flag是无效,所以线程会直接退出。

下一篇会接着介绍:在这个界面开发中学会的操作与遇到的坑。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在安装vs2022之后,需要安装Qt5.14.2并配置编译环境。在安装Qt5.14.2时,需要确保选择与vs2022兼容的版本,并选择安装QtMSVC版本。 安装完成后,打开vs2022。在新建项目时,选择Qt项目类型并填写项目名称。然后在项目属性中配置Qt,选择Qt版本并添加Qt安装路径。接下来在C/C++ -> 常规中添加Qt的include路径,如:C:\Qt\5.14.2\msvc2019_64\include。在链接器 -> 常规中添加库文件路径,如:C:\Qt\5.14.2\msvc2019_64\lib。 在Qt配置文件(.pro)中,添加需要的模块,如:QT += core gui widgets。然后在vs2022中编译运行项目,确保能够成功构建和执行。 要在Windows上安装Qt5.14.2和vs2017并成功配置,首先需要下载并安装Qt5.14.2的Windows安装程序。在安装过程中,选择与vs2017兼容的Qt版本,并选择安装QtMSVC版本。 安装完成后,打开vs2017。在新建项目时,选择Qt项目类型并填写项目名称。然后在项目属性中配置Qt,选择Qt版本并添加Qt安装路径。接下来在C/C++ -> 常规中添加Qt的include路径,如:C:\Qt\5.14.2\msvc2017\include。在链接器 -> 常规中添加库文件路径,如:C:\Qt\5.14.2\msvc2017\lib。 在Qt配置文件(.pro)中,添加需要的模块,如:QT += core gui widgets。然后在vs2017中编译运行项目,确保能够成功构建和执行。 在安装和配置过程中,需要留意Qt和vs的版本兼容性,并确保路径和配置信息填写正确。希望以上指南对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值