QT信号(槽)重载:QProcess、connect、QOverload

看例子:

cpp 复制代码
QProcess *m_process = new QProcess(this);
    connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
          [=](int exitCode, QProcess::ExitStatus exitStatus){
        qDebug() << "app exit";
        QString s = QString("%1 %2").arg(exitCode).arg(exitStatus);
        this->ui->textBrowser->append(s);
        finished(exitCode,exitStatus);
        /* ... */
    });

这部分代码执行了几个关键操作:

使用connect函数连接m_process对象的finished信号到一个lambda表达式。finished信号在子进程结束时发出,它有两个参数:退出码(exitCode)和退出状态(exitStatus)。

QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished)用于解决QProcess::finished信号重载的问题。QProcess::finished信号有几个重载版本,这个表达式指定了我们想要连接的是带有int和QProcess::ExitStatus两个参数的版本。

lambda表达式=(int exitCode, QProcess::ExitStatus exitStatus){...}定义了在信号发出时执行的代码。=表示捕获lambda所在作用域内的所有变量的值副本。这里,虽然没有直接使用任何外部变量,但这个捕获列表仍然很有用,因为它允许lambda表达式内的代码修改任何在其作用域内定义但不在参数列表中的变量(如果有的话)。

在lambda表达式内部,首先使用qDebug()打印了"app exit"字符串,这是一个调试信息,表明子进程已经结束。随后,可以在这里添加更多的处理逻辑,比如根据退出码或退出状态来执行不同的操作。

相关推荐
kaixin_learn_qt_ing10 小时前
【银河麒麟下】 安装达梦数据库 + 使用Qt访问达梦数据库
qt
mengzhi啊10 小时前
缓存类CacheDataManager把临时数据存入json。做成插件·
qt·缓存·json
尘客-追梦12 小时前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
Quz15 小时前
QML SwipeView:实现一个简单的图片浏览器
qt
Quz15 小时前
QML SwipeView:标签导航 与 Loader 懒加载
qt
神仙别闹19 小时前
基于 QT(C++)开发的地铁换乘系统
数据库·c++·qt
C++ 老炮儿的技术栈1 天前
西门子 S7 常用存储区(I/Q/M/T/C/DB/PI/PQ)
linux·开发语言·c++·windows·qt·io
j7~1 天前
【Qt】(篇二)《信号与槽:信号和槽的概述,使用、自定义信号和槽、信号与槽的连接方式、信号和槽的其他说明》---详解
qt·信号·qt5·信号与槽··qt creater
Littlehero_1212 天前
QT自定义控件之电气接线图(源码开源)
开发语言·qt
qq762118222 天前
Ubuntu22.04 Qt 调用shell 脚本启动程序,GLFW 初始化失败
qt