Qt
大约 1 分钟
Qt
目录
终端操作
参考
ping
方案1
等待数据全部接受完毕会才显示
void MainWindow::on_btnPing_clicked(){
QProcess myProcess(this); // 建立程序对象
QString program = "C:/Windows/System32/cmd.exe"; // 程序路径
QStringList arguments; // 参数列表,并传入参数
arguments <<"/c" <<"ping www.baidu.com";
myProcess.start(program,arguments); // 以参数启动程序,并等待程序完成
myProcess.waitForFinished(); // 阻塞(单线程下回阻塞当前进程)
QString qstr = QString::fromLocal8Bit(myProcess.readAllStandardOutput()); // 获取返回内容,并显示
ui->textBrowser->setText(qstr);
}
方案2
能即时显示
//mainwindow.cpp文件,主界面实现
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qdebug.h>
#include <qprocess.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow){
ui->setupUi(this);
}
MainWindow::~MainWindow(){
delete ui;
}
void MainWindow::on_btnPing_clicked(){
qDebug()<<QStringLiteral("开始点击");
ui->textBrowser->clear();
ui->textBrowser->setText(QStringLiteral("请等待"));
ui->textBrowser->update();
// 外部程序部分
QProcess myProcess(this);
QString program = "C:/Windows/System32/cmd.exe";
QStringList arguments;
arguments <<"/c" <<"ping www.baidu.com";
myProcess.start(program,arguments);
/** 每100ms检查一次
* 阻塞直到程序结束或过指定时间(后面的参数默认是30000)。进程完成返回true,否则false
**/
while (myProcess.waitForFinished(100) == false) {
QByteArray qByteRead = myProcess.readAllStandardOutput(); // 读结果
if (!qByteRead.isEmpty()) {
ui->textBrowser->append(QString::fromLocal8Bit(qByteRead)); // append实时更新内容
repaint(); // 立刻调用paintEvent重绘部件,除非禁用更新或隐藏小部件(update()好像会更好)
}
}
QByteArray qByteRead = myProcess.readAllStandardOutput();
ui->textBrowser->append(QString::fromLocal8Bit(qByteRead));
qDebug()<<QString::fromLocal8Bit(qByteRead);
qDebug()<<"结束点击";
}