精华内容
下载资源
问答
  • 在UI界面中调用QProcess中的waitForStarted()造成ui不响应  案例:在UI界面中,当按下按钮时,利用QProcess调用外部程序下载hex文件到arduino板子上;  然而,在使用waitForStarted()检测进程是否开始后,在它之后...

    在UI界面中调用QProcess中的waitForStarted()造成ui不响应

            案例:在UI界面中,当按下按钮时,利用QProcess调用外部程序下载hex文件到arduino板子上;

          然而,在使用waitForStarted()检测进程是否开始后,在它之后的语句可以执行,但需要显示到UI界面的信息却显示不了,这是因为waitForStarted()造成了当前UI界面不能响应了,直到waitForFinished()之后,UI界面才能响应。

          这个时候,可以利用信号与槽来解决这个问题:

          connect(p,SIGNAL(started()),this,SLOT(uploadStarted()));

          在uploadStarted()里面实现在UI界面显示信息就可以了。

          既然这样,我又想把waitForFinished()也转换成信号与槽的形式,开始调用了finished()信号,报错,查了资料才知道这个信号改成finished(int exitCode, QProcess::ExitStatus)了,如下:

          connect(p,SIGNAL(finished(int, QProcess::ExitStatus)),this,SLOT(uploadFinished(int, QProcess::ExitStatus)));


    展开全文
  • QProcess time out

    2019-07-18 00:02:14
    QProcess详解QProcessbool QProcess::waitForStarted(int msecs = 30000)time out 错误分析QProcess time out错误解决 QProcess bool QProcess::waitForStarted(int msecs = 30000) time out 错误分析 默认情况下,...

    QProcess

    bool QProcess::waitForStarted(int msecs = 30000)

    time out 错误分析

    • 默认情况下,等待的时间最大为30000ms,若QProcess的运行时间过长,则会返回“QT process options timed out”错误,并会kill掉进程。

    QProcess time out错误解决

    修改默认值为-1,则无time out.

    process->waitForFinished(-1);
    
    展开全文
  • QT 随笔 QProcess中waitForFinished的坑

    万次阅读 2020-11-02 09:24:05
    文章为个人创作,如转载请标注。 当我们执行一个超过30s的动作的时候,int msecs = 30000,那么就会直接finish,像遇到解压文件这种...p.waitForStarted(); p.waitForFinished(); //此处其实是有一个缺省参数的,...

    文章为个人创作,如转载请标注。

    当我们执行一个超过30s的动作的时候,int msecs = 30000,那么就会直接finish,像遇到解压文件这种情况并且要等finish时候用解压的文件的时候,就会出现问题。

    QString sCommandLine = "your command line";
    QProcess p;
    p.start(sCommandLine);
    p.waitForStarted();  
    p.waitForFinished();      //此处其实是有一个缺省参数的, int msecs = 30000 此处也可能会遇到坑
    p.close();

    如何解决

    QString sCommandLine = "your command line";
    QProcess p;
    p.start(sCommandLine);
    p.waitForStarted(-1);  
    p.waitForFinished(-1);      //-1的意思就是等待你的事件真的结束
    p.close();

    展开全文
  • QT学习_QT调用cmd指令

    2021-08-26 16:40:18
    process.waitForStarted() process.waitForFinished() process.close() cmd指令的使用 cmd /c 指令 开启程序 void MainWindow::on_pushButton_2_clicked() { QString file = QFileDialog::getOpenFileName...

    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调用cmd

    2021-08-26 15:39:14
    一、效果展示 ...process.waitForStarted(); process.waitForFinished(); text->append(QString::fromLocal8Bit(process.readAllStandardOutput())); 三、完整代码 #ifndef MAINWINDOW_H #define MAINW
  • 获取CPUID

    2021-04-26 11:26:07
    #include <QProcess> QString MainWindow::GetCPUManID() { QString cpu_id = "";... p.waitForStarted(); p.waitForFinished(); cpu_id = QString::fromLocal8Bit(p.readAllStandardOutput
  • 系统: win10 IDE: QT(Qt Quick) 命令查看 cmd中输入netstat -nao;... pro.waitForStarted(); //等待程序开始 pro.waitForFinished(); //等待程序结束 QString str(pro.readAllStandardOutput()..
  • Qt QProcess执行Linux 命令行的方法

    千次阅读 2020-02-08 17:45:35
    1、QProcess 打开一个bash终端,可以执行一般的命令,主要实现步骤如下 m_proces_bash = new QProcess; m_proces_bash->...waitForStarted(); connect(m_proces_bash,SIGNAL(readyReadStandardOutput()),th...
  • p.waitForStarted(); p.waitForFinished(); CpuId = QString::fromLocal8Bit(p.readAllStandardOutput()); CpuId = CpuId.remove("ProcessorId").trimmed(); //除去前缀 p.start("wmic diskd
  • QT 执行cmd命令

    2021-03-04 08:30:45
    QProcess p(0); p.start("cmd", QStringList()<... p.waitForStarted(); p.waitForFinished(); QString strTemp=QString::fromLocal8Bit(p.readAllStandardOutput()); QMessageBox testMassage; testMass...
  • #include "SoftWareUpdate.h" #include <QApplication> #include <QDesktopWidget> // when need updater update void updaterUpdate() { ... // p.waitForStarted(2); //sleep(...
  • Qt之启动外部程序

    2019-06-21 14:15:08
    QStringList arguments; arguments << "/c" <<"start cmd.exe"; QProcess process(nullptr);...process.startDetached("cmd.exe",arguments);...process.waitForStarted(); process.waitForFinished(); pr...
  • QT获取CPU ID

    千次阅读 2018-01-23 21:51:56
    直接贴函数了(包含头文件#include ): QString MainWindow::GetCPUManID() { QString cpu_id = ""; ... p.start("wmic CPU get ProcessorID");... p.waitForStarted(); p.waitForFinished
  • QProcess p(0); p.start("cmd", QStringList()<<"/c"<<"ping www.baidu.com"); p.waitForStarted(); p.waitForFinished(); QString strTemp=QString::fromLocal8Bit(p.readAllStandard...
  • 1.实现最简单那的ping操作 cmd命令是: ... 在qt中的实现办法 QProcess p(0);//需要头文件QProcess ... p.waitForStarted(); p.waitForFinished(); QString strTemp=QString::fro
  • QT 在linux环境执行自动关机的操作 QProcess pro; //通过QProcess类来执行第三方程序 QString cmd = QString("shutdown -h 1");...pro.waitForStarted(); pro.waitForFinished(); close(); //关闭上位机 ...
  • Qt 调用 chm格式的文件

    千次阅读 2019-08-01 14:29:35
    在windows平台下, 有一个系统默认的,打开chm格式文件的exe. —— hh.exe ...process.waitForStarted(); 这样, 就可以打开帮助文件。 定位操作 帮助文档通常会拥有多页, 针对程序中的不...
  • QString callProcess( QString & cmd) { QProcess process; process.start(cmd); process.waitForStarted(); while(false == process.waitForFinished()); return process.readAll(); }
  • 在Qt中调用CMD命令

    千次阅读 2017-09-21 21:56:19
    代码: [plain] view plain copy QProcess p(0);  p.start("cmd", QString...p.waitForStarted();  p.waitForFinished();  QString strTemp=QString::fromLocal8Bit(p.readAllSta
  • Qt修改本机IP地址与获取本机IP地址

    千次阅读 2017-03-30 10:34:21
    修改本机IP: QString set="netsh interface ip set address \"本地连接\" static IP地址 子网掩码 网关; QProcess p;... p.waitForStarted(); p.waitForFinished(); 获取本机IP: QString GetCurrentIp
  • Qt执行cmd命令

    2018-10-17 22:45:08
    运行route命令 QProcess p(0);...p.waitForStarted(); p.waitForFinished(); qDebug()<<QString::fromLocal8Bit(p.readAllStandardError()); 运行ipconfig命令 QProcess p(0); p.start("ipconfig...
  • Run exe, and get result

    2020-12-17 16:12:45
    QProcess p(0); p.start("cmd", QStringList()<... p.waitForStarted(); p.waitForFinished(); QString strTemp=QString::fromLocal8Bit(p.readAllStandardOutput()); qDebug()<<"TT1 "...
  • 1.使用 QT ::QProcess 类的接口函数 waitForStarted() 出现 A进程退出来了 B进程一直没有起来的情况, 2. 解决方法: 在 waitFor Started() 后加延时1s可以解决 2)Qt 提供进程状态接口state , 确认进程状态 是 ...
  • 调用waitForStarted执行ok调用waitForBytesWritten,返回值为false,QProcess::ProcessError为5,即QProcess::UnknownError。调用waitForFinished,函数超时,且SqlFormatter.exe进程掉死。网上搜索无...
  • 由于项目中使用到多种不同的驱动文件,考虑到程序的兼容性,将不同的驱动文件做成单独的执行文件,在主程序中调用驱动执行文件。 打开外部程序的方法: QProcess *process=new ...waitForStarted(); FilePath...
  • 其实我们可以通过命令行的方式,查询系统进程来发现用户正在修改系统时间,这对于不想用户修改时间的程序来说,是一种不错的方法。...p.waitForStarted(); p.write("process where caption=\"rundll32...
  • Qt 中用QProcess调用cmd命令

    千次阅读 2019-03-31 21:55:06
    项目做到一定阶段,常常须要在原来的project上调用外部程序。 Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信。 基本用法: QProcess p(0); p.start("cmd", ... p.waitForStarted(...
  • Qt 打开并读取文件内容的方法

    千次阅读 2017-08-28 08:43:34
    1,进程打开 QProcess p(0) ...p.waitForStarted(); p.waitForFinihed(); QString str = p.readAllStandardOutput(); str = str.mid(2,8);//取第二到第八个字符 2,文件系统打开 char buf[1024] = {

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 518
精华内容 207
关键字:

waitforstarted