欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在QT中通过QProcess实现执行cmd命令的操作记录教程

最编程 2024-07-25 18:42:49
...
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QShortcut> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { setWindowTitle("cmd text"); ui->setupUi(this); ui->lineEdit->setText(tr("ping zhangmengmm.top")); ui->textEdit->setLineWrapMode(QTextEdit::NoWrap); process = new QProcess(this); process->setProcessChannelMode(QProcess::MergedChannels); ui->pushButton_Enter->setFocus(); ui->pushButton_Enter->setShortcut(QKeySequence::InsertParagraphSeparator); ui->pushButton_Enter->setShortcut(Qt::Key_Enter); ui->pushButton_Enter->setShortcut(Qt::Key_Return); connect(ui->pushButton,SIGNAL(clicked()),ui->lineEdit,SLOT(clear())); //清除命令行 connect(ui->pushButton_Enter,SIGNAL(clicked()),this,SLOT(write_cmd())); //回车按钮 connect(ui->pushButton_Clear,SIGNAL(clicked()),ui->textEdit,SLOT(clear())); //清除文本框按钮 connect(process,SIGNAL(readyRead()),this,SLOT(read_data())); //读命令行数据 connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(read_data())); //读命令行标准数据(兼容) connect(process,SIGNAL(errorOccurred(QProcess::ProcessError)),this,SLOT(error_process())); //命令行错误处理 connect(process,SIGNAL(finished(int)),this,SLOT(finished_process())); //命令行结束处理 connect(ui->pushButton,SIGNAL(clicked()),ui->lineEdit,SLOT(setFocus())); connect(ui->pushButton_Enter,SIGNAL(clicked()),ui->lineEdit,SLOT(setFocus())); connect(ui->pushButton_Clear,SIGNAL(clicked()),ui->lineEdit,SLOT(setFocus())); process->start("cmd.exe"); } MainWindow::~MainWindow() { if(process != Q_NULLPTR) { process->close(); delete process; process = Q_NULLPTR; } } void MainWindow::write_cmd() { /* 获得命令,\r\n代替键盘的Enter,没有则不会执行 */ QString cmd = ui->lineEdit->text() + "\r\n"; ui->lineEdit->clear(); ui->lineEdit->setFocus(); QByteArray qbarr = cmd.toLatin1(); char *ch = qbarr.data(); qint64 len = cmd.length(); process->write(ch, len); /* 信息输出 */ qDebug() << "Success:write_cmd:" << cmd << endl; } void MainWindow::read_data() { /* 接收数据 */ QByteArray bytes = process->readAll(); /* 显示 */ QString msg = QString::fromLocal8Bit(bytes); ui->textEdit->append(msg); ui->textEdit->update(); /* 信息输出 */ qDebug() << "Success:read_data:" << msg << endl; } void MainWindow::finished_process() { /* 接收数据 */ int flag = process->exitCode(); /* 信息输出 */ qDebug() << "Success:finishedProcess():" << flag << endl; } void MainWindow::error_process() { /* 接收数据 */ int err_code = process->exitCode(); QString err = process->errorString(); /* 显示 */ ui->textEdit->append(QString("error coed:%1").arg(err_code)); ui->textEdit->append(err); /* 信息输出 */ qDebug() << "Success:error_process():" << err << endl; }

推荐阅读