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指令的主要内容,如果未能解决你的问题,请参考以下文章

数据库学习_QT+MYSQL

QT学习_安装及运行

QT学习_QT常用事件

qt如何向cmd写入命令啊?求大牛指导!!!跪谢。。。

qt creator 使用Ui文件的问题

QT5百度地图开发学习——JavaScript调用qt函数并传参给qt