網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Qt一個(gè)進(jìn)程運(yùn)行另一個(gè)進(jìn)程的實(shí)現(xiàn)方法_C 語(yǔ)言
作者:MechMaster ? 更新時(shí)間: 2022-06-25 編程語(yǔ)言1. 一個(gè)進(jìn)程運(yùn)行另一個(gè)進(jìn)程
- Qt 的 QProcess 類(lèi)用來(lái)啟動(dòng)一個(gè)外部程序并與其進(jìn)行通信。
- 使用 start() 函數(shù)運(yùn)行一個(gè)進(jìn)程,之后 QProcess 進(jìn)入 Starting 狀態(tài);
- 當(dāng)程序已經(jīng)運(yùn)行后,QProcess 就會(huì)進(jìn)入 Running 狀態(tài)并發(fā)送 started() 信號(hào);
- 當(dāng)進(jìn)程退出后,QProcess 重新回到 NoRunning 狀態(tài)并發(fā)射 finished() 信號(hào)。
2. 例程代碼
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QProcess>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void showResult();
void showState(QProcess::ProcessState state);
void showError();
void showFinished(int,QProcess::ExitStatus);
private:
Ui::MainWindow *ui;
QProcess myProcess;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTextCodec>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//添加信號(hào)和槽的關(guān)聯(lián)
connect(&myProcess,&QProcess::readyRead,this,&MainWindow::showResult);
connect(&myProcess,&QProcess::stateChanged,this,&MainWindow::showState);
connect(&myProcess,&QProcess::errorOccurred,this,&MainWindow::showError);
connect(&myProcess,SIGNAL(finished(int,QProcess::ExitStatus)),
this,SLOT(showFinished(int,QProcess::ExitStatus)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//啟動(dòng)記事本程序,由于它在Windows的系統(tǒng)目錄下,該目錄已經(jīng)加在了系統(tǒng)PATH環(huán)境變量中,所以不需要寫(xiě)具體路徑
//myProcess.start("notepad.exe");
QString program = "cmd.exe";
QStringList arguments;
arguments<<"/c dir&pause";
myProcess.start(program,arguments);
}
void MainWindow::showResult()
{
QTextCodec * codec = QTextCodec::codecForLocale();
qDebug()<<"showResult: "<<endl<<codec->toUnicode(myProcess.readAll());
}
void MainWindow::showState(QProcess::ProcessState state)
{
qDebug()<<"showState: ";
if(state == QProcess::NotRunning)
{
qDebug()<<"No Running";
}
else if(state == QProcess::Starting)
{
qDebug()<<"Starting";
}
else
{
qDebug()<<"Running";
}
}
void MainWindow::showError()
{
qDebug()<<"showError:"<<endl<<myProcess.errorString();
}
void MainWindow::showFinished(int exitcode, QProcess::ExitStatus exitStatue)
{
qDebug()<<"showFinished:"<<endl<<exitcode<<exitStatue;
}
原文鏈接:https://blog.csdn.net/weixin_38566632/article/details/124300275
相關(guān)推薦
- 2022-04-11 圖文詳解C#中的協(xié)變與逆變_C#教程
- 2022-11-04 關(guān)于docker部署服務(wù)時(shí)ip無(wú)法訪問(wèn)服務(wù)正常的問(wèn)題_docker
- 2022-04-09 SpringBoot設(shè)置CorsFilter過(guò)濾器解決跨域問(wèn)題
- 2022-06-01 Vertica集成Apache?Hudi重磅使用指南_相關(guān)技巧
- 2022-01-17 url傳參 中文出現(xiàn)亂碼問(wèn)題 解決方案
- 2022-03-27 Python?提速器numba_python
- 2022-04-08 從頭學(xué)習(xí)C語(yǔ)言之二維數(shù)組_C 語(yǔ)言
- 2022-11-18 Python正則表達(dá)式re.sub()用法詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支