QProcess 获得 ping 后的结果 || 调用其他 exe 获取其输出信息

目录

一、QProcess 简述:

二、QProcess 函数与应用

1、连接信号槽函数

2、启动 Process

2'、调用其他 exe

2''、其他 exe 的输出写法:

3、读取 其他程序的输出结果信息:

4、其他槽函数信息:

5、结果展示:


一、QProcess 简述:

QProcess 可以启动其他进程 exe 软件,那么在本进程中,可否获得其他进程 (exe) 的输出信息吗?

答案是可以的,如何做呢?我们来看一下:

二、QProcess 函数与应用

1、连接信号槽函数

QProcess myProcess;

connect(&myProcess, &QProcess::readyRead, 
    this, &QMyProcess::showResult);
connect(&myProcess, &QProcess::stateChanged, 
    this, &QMyProcess::showState);
connect(&myProcess, &QProcess::errorOccurred, 
    this, &QMyProcess::showError);
connect(&myProcess, SIGNAL(finished(int,QProcess::ExitStatus)), 
    this, SLOT(showFinished(int, QProcess::ExitStatus)));

2、启动 Process

这里的 “/c” 指定后边的命令,在 cmd 中执行,这样才可以读出 ping 后的结果。

在 cmd 执行命令时,必须要加 “/c”

 

start 与 startDetached 重要区别:

如果是start则回调都可以正常接收到信息;

如果是startDetached则回调无法正常接收到信息。

{
    QString program = "cmd.exe";
    QStringList arguments;
    arguments << "/c ping baidu.com";
    
    // start是一体式的:外部程序启动后,将随主程序的退出而退出
    myProcess.start(program, arguments);
    // startDetached是分离式的:外部程序启动后,不会随主程序的退出而退出
    //myProcess.startDetached(program, arguments);
   
   // start 与 startDetached 重要区别:
   // 如果是start则回调都可以正常接收到信息;
   // 如果是startDetached则回调无法正常接收到信息。
 }  

2'、调用其他 exe

myProcess.start("E:\\CodeTest\\QtTools\\x64\\Debug\\QtTools.exe");

2''、其他 exe 的输出写法:

要用 cout 不能用 print

#include <QtWidgets/QApplication>
#include <iostream>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    StackedWidget w;
	w.setWindowTitle("标题");
	w.show(); 

	std::cout << "it's from cout" << std::endl;

    return a.exec();
}

3、读取 其他程序的输出结果信息:

void QMyProcess::showResult()
{
    QTextCodec *codec = QTextCodec::codecForLocale();

	qDebug() << "showResult: " << endl << codec->toUnicode(myProcess.readAll());
}

4、其他槽函数信息:

void QMyProcess::showState(QProcess::ProcessState state)
{
    qDebug() << "showState: ";
    if (state == QProcess::NotRunning) {
        qDebug() << "Not Running";
    } else if (state == QProcess::Starting) {
        qDebug() << "Starting";
    }  else {
        qDebug() << "Running";
    }
}

void QMyProcess::showError()
{
    qDebug() << "showError: " << endl << myProcess.errorString();
}

void QMyProcess::showFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
    qDebug() << "showFinished: " << endl << exitCode << exitStatus;
}

5、结果展示:

ping 结果展示:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值