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();

四.效果展示

相关推荐
咩咩觉主1 小时前
C# &Unity 唐老狮 No.7 模拟面试题
开发语言·unity·c#
大丈夫在世当日食一鲲1 小时前
Java中用到的设计模式
java·开发语言·设计模式
却道天凉_好个秋2 小时前
c++ 嵌入汇编的方式实现int型自增
开发语言·汇编·c++
33三 三like2 小时前
软件工程画图题
java·开发语言·软件工程
&岁月不待人&2 小时前
Kotlin和Java区别
java·开发语言·kotlin
gallonyin2 小时前
免root运行python保活守护进程supervisor
linux·开发语言·python
tyler-泰勒3 小时前
c++:迭代器的失效
开发语言·c++
白晨并不是很能熬夜3 小时前
【JVM】字节码指令集
java·开发语言·汇编·jvm·数据结构·后端·javac
IT、木易3 小时前
大白话解释 JavaScript 中的this关键字,它在不同场景下是如何取值的?
开发语言·javascript·ecmascript
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧3 小时前
C语言_数据结构总结7:顺序队列(循环队列)
c语言·开发语言·数据结构·算法·visualstudio·visual studio