QT学习_QT调用cmd指令

本文详细介绍了如何在Qt中通过QProcess类调用Windows cmd指令,包括启动程序、获取PID、任务杀戮,并展示了整合代码实例。重点讲解了cmd/c指令的运用和进程管理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值