由于工作需求,要使用QT执行cmd命令。鉴于网上的方法实现了适合自己的一种方法。

先放效果图

QProcess Class

可用于完成启动外部程序,并与之交互通信。

创建并启动

QProcess 中,输入通道分为标准错误通道标准输出通道,对应的信号分别是 readyReadStandardError()readyRead()
可通过 setProcessChannelMode(QProcess::MergedChannels) 将标准错误通道合并至标准输出通道。

    process = new QProcess(this);process->setProcessChannelMode(QProcess::MergedChannels);...process->start("cmd.exe");

Signal

readyRead() 将我们输入的指令显示到控制台窗口中。
readyReadStandardOutput()将 cmd 指令返回结果显示至控制台窗口中。
errorOccurred(QProcess::ProcessError)将 QProcess 发送的打印至控制台。
finished(int)当 QProcess 退出时,mProcess 回到 NotRunning 状态,并发出 finished() 信号。

源码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QProcess>
#include <handleapi.h>
#include <QShortcut>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:Ui::MainWindow *ui;QProcess *process;QShortcut *key;public slots:void write_cmd();void read_data();void finished_process();void error_process();};#endif // MAINWINDOW_H

mainwindow.cpp

#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;
}

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>750</width><height>426</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralWidget"><widget class="QSplitter" name="splitter_3"><property name="geometry"><rect><x>31</x><y>10</y><width>681</width><height>341</height></rect></property><property name="orientation"><enum>Qt::Vertical</enum></property><widget class="QSplitter" name="splitter_2"><property name="orientation"><enum>Qt::Vertical</enum></property><widget class="QSplitter" name="splitter"><property name="orientation"><enum>Qt::Horizontal</enum></property><widget class="QPushButton" name="pushButton"><property name="text"><string>Clear</string></property></widget><widget class="QLineEdit" name="lineEdit"/><widget class="QPushButton" name="pushButton_Enter"><property name="text"><string>Enter</string></property></widget></widget><widget class="QTextEdit" name="textEdit"/></widget><widget class="QPushButton" name="pushButton_Clear"><property name="text"><string>Clear</string></property></widget></widget></widget><widget class="QMenuBar" name="menuBar"><property name="geometry"><rect><x>0</x><y>0</y><width>750</width><height>21</height></rect></property></widget><widget class="QToolBar" name="mainToolBar"><attribute name="toolBarArea"><enum>TopToolBarArea</enum></attribute><attribute name="toolBarBreak"><bool>false</bool></attribute></widget><widget class="QStatusBar" name="statusBar"/></widget><layoutdefault spacing="6" margin="11"/><resources/><connections/>
</ui>

使用QT的QProcess执行cmd命令【记录】相关推荐

  1. 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )

    文章目录 Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 1.生成 bat 脚本注意事项 2.Java 执行 Cmd 命令 3.完整代码示例 4.执行结果 Java 文件生成 ...

  2. SQL下三种执行CMD命令的方法

    SQL下三种执行CMD命令的方法: 先删除7.18号日志: (1)exec master.dbo.xp_cmdshell 'del C:/winnt/system32/logfiles/W3SVC5/ ...

  3. java -version cmd_java如何运行步骤cmd?Java执行cmd命令方法有哪些?

    写好一个java程序之后,我们的最终目的就是可以正确的运行程序,如果程序运行正确了,那么代码也就没有什么问题了,可是java如何运行步骤cmd?接下来,我们就来给大家讲解一下这方面的内容. 1.首先用 ...

  4. java 执行 cmd 命令(转)

    原文出处:http://blog.csdn.net/saindy5828/article/details/11975527 用JAVA代码实现执行CMD命令的方法 java的Runtime.getRu ...

  5. java执行cmd命令,返回结果中文乱码问题解决

    java执行cmd命令,返回结果中文乱码问题解决 参考文章: (1)java执行cmd命令,返回结果中文乱码问题解决 (2)https://www.cnblogs.com/kwaitfort/p/90 ...

  6. python 命令-python执行cmd命令

    我们在做手机端自动化的时候有时候可能会遇到需要执行cmd命令完成用例,我们一起学习下,通过python脚本执行cmd命令 cmd是什么 cmd是command的缩写.即命令提示行(CMD),是在OS ...

  7. node执行cmd命令方法

    var cmd='tasklist'; //获取 子进程模块的exec方法,用于执行cmd命令 var exec = require('child_process').exec; //运行 定义的cm ...

  8. 【TypeScript】通过node-cmd使用代码,执行cmd命令行

    使用第三方库 node-cmd 执行 cmd 命令行命令 具体实现代码如下: const cmdShell = require('node-cmd')async function cmd(domain ...

  9. 命令行无法运行php,php不支持执行cmd命令行

    php不支持执行cmd命令行是因为你没有关闭php配置文件中的安全模式. 在php.ini文件中配置safe_mode参数支持命令执行的方法: 首先,打开php.ini,关掉安全模式safe_mode ...

最新文章

  1. 前置机上如何地址转换_canvas原生层级较高,遮盖自定义tabbar,转换为图片解决...
  2. 白话tensorflow分布式部署和开发
  3. hadoop-2.5.1 源码编译
  4. Trident API 概览
  5. Java多线程学习二十:HashMap 为什么是线程不安全的
  6. centos6.5 安装python3.5
  7. 一步一步写算法(之双向链表)
  8. PAT 1012 数字分类 (20 分)(C语言)
  9. android studio找不到r文件,Apk 中找不到r类文件
  10. html缓存效果代码,html5缓存(示例代码)
  11. Java菜鸡的学习日常——2021华为软挑(练手)
  12. C. Spell Checker
  13. 尚品宅配、欧派激战整装市场
  14. Android Push哪家强——分析豌豆荚1400个APP
  15. 4月30日之后的华芯通
  16. 物联网时代数据数据库如何选型?
  17. Qt QPlainTextEdit和QTextEdit区别
  18. Witt向量简介 §4.2:环的完备化的若干问题说明
  19. 俞敏洪:《中国合伙人》
  20. 练习-打印杨辉三角形

热门文章

  1. 你还不会用CAD一键布置停车位?赶紧学起来!
  2. 保留两位小数正则表达式
  3. 阿里、腾讯、百度纷纷涉猎SaaS领域寓意为何?
  4. C++ 飞机大战小游戏 EGE
  5. android 简书饿了么,饿了吗
  6. 在为配钥匙发愁吗?无人AI钥匙机帮你配Hello Kitty定制钥匙!
  7. 软考:2021 中级软件评测师报考指南
  8. 招标室访谈室专用高清录像机
  9. 第十八章 攻心为上的泡妞兵法
  10. ES6与CommonJS的模块化加载