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

四.效果展示

相关推荐
wangqiaowq3 小时前
AST 安全求值
java·开发语言
我们从未走散3 小时前
AI 生图平台如何避免资损:用“扣款与凭据同事务”构建三态账本
开发语言·数据库·php
weixin_440730504 小时前
字符编码笔记-utf-8 、unicode、gbk,ascii编码格式
开发语言·笔记
励志不掉头发的内向程序员5 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
PHP实战开发录5 小时前
PHP接口大整数为什么变了
开发语言·php
临床数据科学和人工智能兴趣组8 小时前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
andyweike11 小时前
php笔记
开发语言·笔记·php
Circ.12 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python
现任明教教主~14 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
Zhou14113614 小时前
SpringSecurity_02_授权与高级功能
开发语言·python