Qt之啟動外部程式

來源:互聯網
上載者:User
簡述

QProcess可以用來啟動外部程式,並與它們互動。

要啟動一個進程,通過調用start()來進行,參數包含程式的名稱和命令列參數,參數作為一個QStringList的單個字串。

另外,也可以使用setProgram()和setArguments()來運行,然後調用start()或open()。

簡述 介面 樣本 cmd 啟動cmd cmd帶參數 cmd擷取傳回值 putty遠程登入 WinSCP遠程檔案傳輸 管道 錯誤處理 參數arguments 擷取環境變數

介面

start() 啟動外部程式

readAllStandardError() 從標準錯誤中擷取所有資料

readAllStandardOutput() 從標準輸出中擷取所有資料

write() 繼承於QIODevice

close() 繼承於QIODevice

除此之外,QProcess還包含靜態成員函數:

execute() 啟動一個進程,然後等待該進程結束。

startDetached() 啟動一個進程,然後使其和當前進程脫離進程的父子關係。 樣本 cmd 啟動cmd

QProcess process(this);process.startDetached("cmd.exe");
cmd帶參數

使用cmd來刪除本地檔案

QProcess process(this);process.start("cmd.exe");process.write ("del E:\\a.txt\n\r");process.write ("exit\n\r");process.waitForFinished();process.close();
cmd擷取傳回值

使用cmd來查看網路狀況

QStringList arguments;arguments << "/c" << "ping www.baidu.com";QProcess process(this);process.start("cmd.exe", arguments);process.waitForStarted();process.waitForFinished();QString strResult = QString::fromLocal8Bit(process.readAllStandardOutput());QMessageBox msgBox(this);msgBox.setText(strResult);msgBox.exec();
putty遠程登入
QString program = "E:/Putty.exe";QStringList arguments;arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73") << "22";QProcess *process = new QProcess(this);process->setProcessChannelMode(QProcess::SeparateChannels);process->setReadChannel(QProcess::StandardOutput);process->start(program, arguments, QIODevice::ReadWrite);
WinSCP遠程檔案傳輸
QString program = QCoreApplication::applicationDirPath() + "/WinSCP/WinSCP.exe";QStringList arguments;arguments << QString("%1:%2@%3:%4").arg("root").arg("wang").arg("172.18.5.73").arg(22);QProcess *process = new QProcess(this);process->setProcessChannelMode(QProcess::SeparateChannels);process->setReadChannel(QProcess::StandardOutput);process->start(program, arguments, QIODevice::ReadWrite);
管道

一個進程的標準輸出資料流到目標進程的標準輸入。

command1 | command2

可以用下面代碼實現:

QProcess process1;QProcess process2;process1.setStandardOutputProcess(&process2);process1.start("command1");process2.start("command2");
錯誤處理

啟動外部程式,當發生錯誤時,可以根據指定的錯誤描述所發生的錯誤類型。

connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError)));void processError(QProcess::ProcessError error){    switch(error)    {    case QProcess::FailedToStart:        QMessageBox::information(0, "Tip", "FailedToStart");        break;    case QProcess::Crashed:        QMessageBox::information(0, "Tip", "Crashed");        break;    case QProcess::Timedout:        QMessageBox::information(0, "Tip", "Timedout");        break;    case QProcess::WriteError:        QMessageBox::information(0, "Tip", "WriteError");        break;    case QProcess::ReadError:        QMessageBox::information(0, "Tip", "ReadError");        break;    case QProcess::UnknownError:        QMessageBox::information(0, "Tip", "UnknownError");        break;    default:        QMessageBox::information(0, "Tip", "UnknownError");        break;    }}

假設不存在對應的外部程式,則會返回錯誤類型QProcess::FailedToStart。 參數arguments

以putty遠程登入狀態例,putty可以使用命令列putty [-pw password] user@ip來進行串連。

所以中間為空白格的地方使用arguments進行單個字串分離:

QStringList arguments;arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73");

其它參數類似。

QProcess process;process.start("del /s *.txt");//等同於process.start("del", QStringList() << "/s" << "*.txt");
擷取環境變數

返回調用進程的環境變數作為一個索引值對列表。

QStringList environment =  QProcess::systemEnvironment();//environment = {"PATH=/usr/bin:/usr/local/bin", "USER=greg", "HOME=/home/greg"}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.