首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单击Qt4按钮时触发.sh文件或bash命令?

如何在单击Qt4按钮时触发.sh文件或bash命令?
EN

Stack Overflow用户
提问于 2021-01-23 05:32:08
回答 1查看 136关注 0票数 0

现在,我所拥有的只有我的QML文件和按钮。

代码语言:javascript
复制
 /*PlasmaComponents.*/ToolButton {
    id: shutdownButton
    text: i18n("Shutdown")
    iconSource: "system-shutdown"
    enabled: power.canShutdown
    onClicked: doTheThing();
}

从阅读有关QML的内容来看,我似乎需要添加一个C++进程。使用QML4可以做到这一点吗?如果不能,QProcess能工作吗?如果是这样,需要更改哪些文件?

EN

回答 1

Stack Overflow用户

发布于 2021-01-23 13:14:17

您可以像这样编写流程执行器类:

代码语言:javascript
复制
#include <QProcess>
#include <QVariant>

class Process : public QProcess {
Q_OBJECT

public:
Process(QObject *parent = 0) : QProcess(parent) { }

Q_INVOKABLE void start(const QString &program, const QVariantList &arguments)                {
    QStringList args;

    // convert QVariantList from QML to QStringList for QProcess 

    for (int i = 0; i < arguments.length(); i++)
        args << arguments[i].toString();

    QProcess::start(program, args);
}

Q_INVOKABLE QByteArray readAll() {
    return QProcess::readAll();
}
};

并注册它们:

代码语言:javascript
复制
#include <QtQml>
#include "process.h"

qmlRegisterType<Process>("Process", 1, 0, "Process");

最后从QML运行您的命令:

代码语言:javascript
复制
import QtQuick 2.4
import QtQuick.Controls 1.3
import Process 1.0

ApplicationWindow {
width: 800
height: 480
visible: true

Text {
    id: text
}

Process {
    id: process
    onReadyRead: text.text = readAll();
}

Timer {
    interval: 1000
    repeat: true
    triggeredOnStart: true
    running: true
    onTriggered: process.start("poweroff", [ "-f" ]);
 }

-f make被迫立即关闭电源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65853041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档