使用QT的QProcess执行cmd命令【记录】
由于工作需求,要使用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命令【记录】相关推荐
- 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )
文章目录 Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 1.生成 bat 脚本注意事项 2.Java 执行 Cmd 命令 3.完整代码示例 4.执行结果 Java 文件生成 ...
- SQL下三种执行CMD命令的方法
SQL下三种执行CMD命令的方法: 先删除7.18号日志: (1)exec master.dbo.xp_cmdshell 'del C:/winnt/system32/logfiles/W3SVC5/ ...
- java -version cmd_java如何运行步骤cmd?Java执行cmd命令方法有哪些?
写好一个java程序之后,我们的最终目的就是可以正确的运行程序,如果程序运行正确了,那么代码也就没有什么问题了,可是java如何运行步骤cmd?接下来,我们就来给大家讲解一下这方面的内容. 1.首先用 ...
- java 执行 cmd 命令(转)
原文出处:http://blog.csdn.net/saindy5828/article/details/11975527 用JAVA代码实现执行CMD命令的方法 java的Runtime.getRu ...
- java执行cmd命令,返回结果中文乱码问题解决
java执行cmd命令,返回结果中文乱码问题解决 参考文章: (1)java执行cmd命令,返回结果中文乱码问题解决 (2)https://www.cnblogs.com/kwaitfort/p/90 ...
- python 命令-python执行cmd命令
我们在做手机端自动化的时候有时候可能会遇到需要执行cmd命令完成用例,我们一起学习下,通过python脚本执行cmd命令 cmd是什么 cmd是command的缩写.即命令提示行(CMD),是在OS ...
- node执行cmd命令方法
var cmd='tasklist'; //获取 子进程模块的exec方法,用于执行cmd命令 var exec = require('child_process').exec; //运行 定义的cm ...
- 【TypeScript】通过node-cmd使用代码,执行cmd命令行
使用第三方库 node-cmd 执行 cmd 命令行命令 具体实现代码如下: const cmdShell = require('node-cmd')async function cmd(domain ...
- 命令行无法运行php,php不支持执行cmd命令行
php不支持执行cmd命令行是因为你没有关闭php配置文件中的安全模式. 在php.ini文件中配置safe_mode参数支持命令执行的方法: 首先,打开php.ini,关掉安全模式safe_mode ...
最新文章
- 前置机上如何地址转换_canvas原生层级较高,遮盖自定义tabbar,转换为图片解决...
- 白话tensorflow分布式部署和开发
- hadoop-2.5.1 源码编译
- Trident API 概览
- Java多线程学习二十:HashMap 为什么是线程不安全的
- centos6.5 安装python3.5
- 一步一步写算法(之双向链表)
- PAT 1012 数字分类 (20 分)(C语言)
- android studio找不到r文件,Apk 中找不到r类文件
- html缓存效果代码,html5缓存(示例代码)
- Java菜鸡的学习日常——2021华为软挑(练手)
- C. Spell Checker
- 尚品宅配、欧派激战整装市场
- Android Push哪家强——分析豌豆荚1400个APP
- 4月30日之后的华芯通
- 物联网时代数据数据库如何选型?
- Qt QPlainTextEdit和QTextEdit区别
- Witt向量简介 §4.2:环的完备化的若干问题说明
- 俞敏洪:《中国合伙人》
- 练习-打印杨辉三角形