QT学习_QT调用cmd指令
Posted Leslie X徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习_QT调用cmd指令相关的知识,希望对你有一定的参考价值。
QT调用Windows的cmd指令
知识点
- QProcess进程的使用
- process.start( 程序,参数指令 )
- process.waitForStarted()
- process.waitForFinished()
- process.close()
- cmd指令的使用
- cmd /c 指令
功能
- 运行选择的程序
- 获取选择程序的pid
- 通过taskkill关闭程序进程
开启程序
void MainWindow::on_pushButton_2_clicked()
{
QString file = QFileDialog::getOpenFileName(this,"select exe",QDir::homePath(),"(*.exe)");
qDebug()<<file;
QStringList arguments;
arguments<< "/c" << file;
QProcess cmd(this);
cmd.start("cmd.exe",arguments);
cmd.waitForStarted();
cmd.waitForFinished();
}
获取pid
void MainWindow::on_byngetpid_clicked()
{
//获取pid
QProcess cmd(this);
QStringList arguments;
arguments<< "/c" << "tasklist|findstr" << ui->labexe->text();
cmd.start("cmd.exe",arguments);//这种方式最好,使用cmd程序,运行命令
cmd.waitForStarted();//必须加waitForStarted
cmd.waitForFinished();
// QString temp=QString::fromLocal8Bit(cmd.readAllStandardOutput());//fromLocal8Bit()函数可以设置编码。处理中文等字符问题
QString temp = cmd.readAll();
qDebug()<<temp;
QStringList templist = temp.split(QRegExp("\\\\s+"));
//正则表达式'\\s+'表示查询除去字符间所有空白后的单词,'\\s'只除去单个空白
// for(auto i:templist) qDebug()<<i;
//"geany.exe" "1100" "Console" "1" "34,968" "K" ""
QString PID = templist.at(1);
ui->labpid->setText(PID);
}
杀死进程
void MainWindow::on_pushButton_clicked()
{
QStringList arguments;
arguments<< "/c" << "taskkill" << "/PID" << ui->labpid->text();
QProcess cmd(this);
cmd.start("cmd.exe",arguments);
cmd.waitForStarted();
cmd.waitForFinished();
}
界面:
整理后代码:
将执行代码整合进ExeCmd函数
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
#include <QDebug>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
QStringList MainWindow::ExeCmd(QStringList arguments,bool returnflag)
{
QProcess cmd(this);
cmd.start("cmd.exe",arguments);//这种方式最好,使用cmd程序,运行命令
cmd.waitForStarted();//必须加waitForStarted
cmd.waitForFinished();
if(returnflag == false) {cmd.close();return QStringList();}
// QString temp=QString::fromLocal8Bit(cmd.readAllStandardOutput());//fromLocal8Bit()函数可以设置编码。处理中文等字符问题
QString temp = cmd.readAll();
QStringList templist = temp.split(QRegExp("\\\\s+"));//正则表达式'\\s+'表示查询除去字符间所有空白后的单词,'\\s'只除去单个空白
cmd.close();
return templist;
}
void MainWindow::on_byngetpid_clicked()
{
//获取pid
QStringList arguments;
arguments<< "/c" << "tasklist|findstr" << ui->labexe->text();
QStringList templist = ExeCmd(arguments,true);
// for(auto i:templist) qDebug()<<i;
//"geany.exe" "1100" "Console" "1" "34,968" "K" ""
QString PID = templist.at(1);
ui->labpid->setText(PID);
}
void MainWindow::on_pushButton_clicked()
{
QStringList arguments;
arguments<< "/c" << "taskkill" << "/PID" << ui->labpid->text();
ExeCmd(arguments);
arguments.clear();
arguments<< "/c" << "tasklist|findstr" << ui->labexe->text();
QStringList templist = ExeCmd(arguments,true);
//templist=="",内容长度为 1
if(templist.size()==1)qDebug("kill pid success");
}
void MainWindow::on_pushButton_2_clicked()
{
QString file = QFileDialog::getOpenFileName(this,"select exe",QDir::homePath(),"(*.exe)");
//截取执行的程序名称,找到最后一个'/',得到带.exe的程序名,这里使用section来分段
QString exename = file.section('/',-1,-1);
ui->labexe->setText(exename);
QStringList arguments;
arguments<< "/c" << file;
ExeCmd(arguments);
}
以上是关于QT学习_QT调用cmd指令的主要内容,如果未能解决你的问题,请参考以下文章