用QT打造一个系统命令行

编程入门 行业动态 更新时间:2024-10-07 11:30:29

用QT打造一个系统<a href=https://www.elefans.com/category/jswz/34/1771327.html style=命令行"/>

用QT打造一个系统命令行

文章目录

    • QT命令行
    • 报错

QT实战教程:

  • QT初步之计时器💎 QT信号与槽💎 QT多线程实战💎 QT文件读写
  • QT调用外部程序💎 QT命令行💎 QT异步命令行

源码地址:【QT】通过QProcess实现一个命令行

QT命令行

在了解到QProcess的强大之处后,就可以实现一个系统的命令行了。

新建一个QT项目,然后拖动一个lineEdit改名为lineCode;拖动一个textBrowser改名为txtRecv。右键lineEdit转到槽,为其添加一个returnPressed()动作。

其代码为

void MainWindow::on_lineCode_returnPressed()
{QProcess cmd;QString codes = ui->lineCode->text();QStringList para = codes.split(" ");cmd.start(para.first(),para.sliced(1));cmd.waitForStarted();cmd.waitForFinished();ui->lineCode->setText("");ui->txtRecv->append(codes);ui->txtRecv->append(cmd.readAllStandardOutput());
}

效果为

这样做有个问题,就是没法显示错误,明明最后输入的qnmd并不是命令,却没有任何提示,故而需要打印错误。

报错

所以新拉一个txtcontent,然后将代码改为

void MainWindow::on_lineCode_returnPressed()
{QProcess cmd;QString codes = ui->lineCode->text();QStringList para = codes.split(" ");cmd.start(para.first(),para.sliced(1));cmd.waitForStarted();cmd.waitForFinished();ui->lineCode->setText("");QString output = cmd.readAllStandardOutput();if(!output.isEmpty()){ui->txtRecv->append(codes);ui->txtRecv->append(output);}QString err = cmd.readAllStandardError();if(!err.isEmpty()){ui->txtError->append(codes);ui->txtError->append(err);}
}

效果为

但这个其实并不能解决错误指令的问题,由于qnmd并不是有效指令,所以既没有标准输出,也没有标准错误。

为了甄别这种情况,可调用成员函数error(),其返回值是枚举类型,当返回值为0时,表示启动程序失败。

效果为

只需在waitForFinished();下面插入

if(cmd.error()==0)ui->txtError->append(codes+" error!!!\n请输入正确的指令");

其中error()返回的枚举类型如下

QProcess::描述
FailedToStart0进程启动失败
Crashed1进程成功后崩溃
Timedout2最后一次调用waitFor…()函数超时。此时QProcess状态不变,并可以再次调用waitFor…()类型的函数
WriteError3向进程中写入数据时出错。如进程尚未启动,或者输入通道被关闭时。
ReadError4从进程中读取数据时出错。如进程尚未启动时
UnknownError5默认返回值,未知或者没有错误。

最后,还是觉得哪里不对,主要原因是命令行中会给出当前位置,这一点并不难,只需用到

QString path = QCoreApplication::applicationDirPath();
codes = path + ">" + codes;

然后就可以看到

更多推荐

用QT打造一个系统命令行

本文发布于:2024-02-28 05:13:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768544.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令行   系统   QT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!