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"字符串,这是一个调试信息,表明子进程已经结束。随后,可以在这里添加更多的处理逻辑,比如根据退出码或退出状态来执行不同的操作。

相关推荐
雪的季节8 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
努力努力再努力wz17 小时前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql
郝学胜-神的一滴19 小时前
Qt 高级开发 016:半内存管理机制
开发语言·c++·qt·程序人生·用户界面
香菇滑稽之谈19 小时前
VSCode配置QT环境
ide·vscode·qt
雪的季节19 小时前
Qt pro 多项目、子目录、多层级配置(超级详细 + 实战模板)
qt
郝学胜-神的一滴19 小时前
Qt 高级开发 020:水平布局手写代码实战
开发语言·c++·qt·系统架构·软件构建·用户界面
机器视觉知识推荐、就业指导1 天前
Qt6 + QCustomPlot 实时曲线 Demo ,适合串口与上位机项目
qt
YY&DS1 天前
Qt 嵌入 CEF 在 Linux 下必须设置 `QT_XCB_GL_INTEGRATION=xcb_egl才能加载网页
linux·开发语言·qt
秋田君2 天前
Qt 5.12.8 下载与安装教程(附网盘资源)
开发语言·qt
郝学胜-神的一滴2 天前
Qt 高级开发 019:从零定制登录窗口按钮、Logo 样式与交互悬浮效果
开发语言·c++·qt·程序人生·交互·用户界面