QT交互界面:实现按钮运行脚本程序

一.所需运行的脚本

本篇采用上一篇文章的脚本为运行对象,实现按钮运行脚本

上一篇文章:从0到1:QT项目在Linux下生成可以双击运用的程序(采用脚本)-CSDN博客

二.调用脚本的代码

widget.cpp中添加以下代码

复制代码
#include "widget.h"
#include "./ui_widget.h"
#include <QMessageBox>
#include <QProcess>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton_test, &QPushButton::clicked, this, &Widget::on_pushButton_test_clicked);
}

void Widget::on_pushButton_test_clicked()
{
    QString strCmd = "/home/popo/double_click_test/jiao";
    QProcess process;
    process.start("bash", QStringList() << "-c" << strCmd);
    if (process.waitForStarted())
    {
        qDebug() << "Process started successfully.";
        if (process.waitForFinished())
        {
            QByteArray result = process.readAllStandardOutput(); // 读取脚本的输出
            QByteArray error = process.readAllStandardError(); // 读取错误输出
            qDebug() << "Script output:" << result;
            qDebug() << "Script error output:" << error;
        }
        else
        {
            qWarning() << "Failed to execute script";
        }
    }
    else
    {
        qWarning() << "Failed to start script execution";
    }
    process.close();
}

三.代码解析

启动进程

复制代码
process.start("bash", QStringList() << "-c" << strCmd);

检查进程是否成功启动

复制代码
if (process.waitForStarted())

等待进程执行完成

再次使用 waitForFinished,等待进程执行完成。如果成功,返回 true

进程提示信息

复制代码
    if (process.waitForStarted())
    {
        qDebug() << "Process started successfully.";
        if (process.waitForFinished())
        {
            QByteArray result = process.readAllStandardOutput(); // 读取脚本的输出
            QByteArray error = process.readAllStandardError(); // 读取错误输出
            qDebug() << "Script output:" << result;
            qDebug() << "Script error output:" << error;
        }
        else
        {
            qWarning() << "Failed to execute script";
        }
    }
    else
    {
        qWarning() << "Failed to start script execution";
    }

关闭进程

复制代码
process.close();

四.效果展示

相关推荐
weixin_44073050几秒前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest
geovindu28 分钟前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
心易行者1 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
tedcloud1231 小时前
OpenLogi 怎么搭建?用 Rust 打造一个轻量的 Logitech 外设管理工具
linux·运维·服务器·开发语言·后端·rust·开源
Tanjia_kiki2 小时前
谷歌浏览器中F12编辑并重发请求
开发语言·前端·javascript
程序猿编码2 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
传奇开心果编程2 小时前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
秋田君2 小时前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt
mengzhi啊2 小时前
QT程序界面自适应1080/2K/4K屏幕。qputenv或者setAttribute
qt
统计学小王子2 小时前
数学建模国赛倒计时6天——《软件工具(R语言精讲)》
开发语言·数学建模·r语言