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

相关推荐
꧁坚持很酷꧂34 分钟前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
ChoSeitaku1 小时前
17.QT-Qt窗口-工具栏|状态栏|浮动窗口|设置停靠位置|设置浮动属性|设置移动属性|拉伸系数|添加控件(C++)
c++·qt·命令模式
OpenC++4 小时前
【C++QT】Buttons 按钮控件详解
c++·经验分享·qt·leetcode·microsoft
我真的不会C5 小时前
QT窗口相关控件及其属性
开发语言·qt
云小逸5 小时前
【QQMusic项目界面开发复习笔记】第二章
c++·qt
꧁坚持很酷꧂6 小时前
配置Ubuntu18.04中的Qt Creator为中文(图文详解)
开发语言·qt·ubuntu
快乐飒男7 小时前
Qt基础009(HTTP编程和QJSON)
qt
此刻我在家里喂猪呢9 小时前
Qt指ModbusTcp协议的使用
qt
爱上解放晚晚9 小时前
QT 的.pro 转 vsproject 工程
开发语言·qt
Zfox_9 小时前
【Qt】文件
c++·qt·qt5·客户端开发