news 2026/7/18 13:31:18

[C++]Qt 绑定外部 exe 输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[C++]Qt 绑定外部 exe 输出

QT如何绑定exe到qt应用程序输出

在 Qt 中,绑定外部 exe 进程的输出到 Qt 应用程序,核心是通过QProcess类实现 —— 它可以启动外部进程,并捕获其标准输出(stdout)和标准错误(stderr)。

核心实现步骤(跨平台 Windows/Linux/ARM)

cpp

#include <QCoreApplication> #include <QProcess> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QProcess process; // 1. 启动外部exe(替换为你的exe路径,Linux下是可执行文件路径) // Windows示例:process.start("cmd.exe", QStringList() << "/c" << "dir"); // Linux示例:process.start("/bin/ls", QStringList() << "-l"); process.start("你的exe绝对路径", QStringList()); // 2. 绑定输出信号:当外部进程有输出时,触发槽函数 QObject::connect(&process, &QProcess::readyReadStandardOutput, [&](){ // 读取标准输出 QByteArray output = process.readAllStandardOutput(); qDebug() << "【标准输出】" << output; // 可将 output 显示到 Qt 界面(如 QTextEdit) }); // 3. 绑定错误输出信号 QObject::connect(&process, &QProcess::readyReadStandardError, [&](){ // 读取标准错误 QByteArray error = process.readAllStandardError(); qDebug() << "【错误输出】" << error; }); // 4. 绑定进程结束信号 QObject::connect(&process, QProcess::finished, [&](int exitCode, QProcess::ExitStatus exitStatus){ qDebug() << "进程结束,退出码:" << exitCode; a.quit(); }); return a.exec(); }

关键说明

  1. 路径处理(跨平台重点)
    • Windows:exe 路径建议用绝对路径,如C:/test/hello.exe;若 exe 在 Qt 输出目录,可直接写文件名。
    • Linux/ARM:需确保可执行文件有执行权限(chmod +x 文件名),路径格式如/home/user/test/hello
  2. 实时输出 vs 一次性读取
    • 上述代码用readyReadStandardOutput实现实时输出(外部进程输出一行,Qt 就捕获一行)。
    • 若要等进程结束后一次性读取,可在finished信号中调用readAllStandardOutput()
  3. 带参数启动 exe传给start的第二个参数QStringList是 exe 的命令行参数,例如:

    cpp

    // 启动 ping.exe,参数:ping 127.0.0.1 -n 3 process.start("ping.exe", QStringList() << "127.0.0.1" << "-n" << "3");

界面集成示例(输出到 QTextEdit)

如果是 GUI 程序,将输出显示到QTextEdit

cpp

// 在 MainWindow 中 #include <QMainWindow> #include <QProcess> #include <QTextEdit> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { QTextEdit *edit = new QTextEdit(this); setCentralWidget(edit); QProcess *process = new QProcess(this); process->start("你的exe路径"); connect(process, &QProcess::readyReadStandardOutput, this, [=](){ QByteArray output = process->readAllStandardOutput(); edit->append(output); // 追加到文本框 }); } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 13:30:10

D3KeyHelper:彻底解放双手的暗黑3智能按键助手

D3KeyHelper&#xff1a;彻底解放双手的暗黑3智能按键助手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中重复的技能按键感到手指酸痛…

作者头像 李华
网站建设 2026/7/18 13:28:40

3步解锁B站缓存视频合并:让离线观看更流畅的Android解决方案

3步解锁B站缓存视频合并&#xff1a;让离线观看更流畅的Android解决方案 【免费下载链接】BilibiliCacheVideoMerge &#x1f525;&#x1f525;Android上将bilibili缓存视频合并导出为mp4&#xff0c;支持安卓5.0 ~ 13&#xff0c;视频挂载弹幕播放(Android consolidates and …

作者头像 李华
网站建设 2026/7/18 13:27:30

J-Link+Ozone调试教程

一、调试前的准备使用J-Link将PC和单片机连接以STM32入门教程中的“读写内部FLASH”实验为例&#xff0c;使用Keil打开该工程按照下图所示的步骤进行操作&#xff0c;如果使用J-Link仿真器&#xff0c;则在第三步选择ST-Link Debugger按照下图所示的步骤进行操作&#xff0c;输…

作者头像 李华
网站建设 2026/7/18 13:26:06

终极指南:3步完成B站缓存视频合并,安卓用户的离线观影救星

终极指南&#xff1a;3步完成B站缓存视频合并&#xff0c;安卓用户的离线观影救星 【免费下载链接】BilibiliCacheVideoMerge &#x1f525;&#x1f525;Android上将bilibili缓存视频合并导出为mp4&#xff0c;支持安卓5.0 ~ 13&#xff0c;视频挂载弹幕播放(Android consolid…

作者头像 李华
网站建设 2026/7/18 13:24:39

告别歌词不同步烦恼:用LRC Maker打造你的专属音乐时光机

告别歌词不同步烦恼&#xff1a;用LRC Maker打造你的专属音乐时光机 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾为心爱的歌曲配上歌词时&#xff0c;发…

作者头像 李华
网站建设 2026/7/18 13:23:05

别踩2026年做培训视频总结的常见成本误区,过来人分享实操经验

先说明白核心判断 2026年做培训视频总结的常见成本误区&#xff0c;本质是要么贪免费选了转写不准的工具&#xff0c;花几小时返工反而亏了时间成本&#xff1b;要么冲动买了高价年卡&#xff0c;一年用不了几次亏了金钱成本。作为测了3年AI效率工具的产品视角博主&#xff0c…

作者头像 李华