1. 程式人生 > >Qt 之啟動外部程式

Qt 之啟動外部程式

簡述

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

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

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

|

介面

  • 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("%[email protected]%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:%[email protected]%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] [email protected]來進行連線。

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

QStringList arguments;
arguments<< "-pw" << "wang" << QString("%[email protected]%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"}

相關推薦

QtQt啟動外部程式【轉】

簡述 QProcess可以用來啟動外部程式,並與它們互動。 要啟動一個程序,通過呼叫start()來進行,引數包含程式的名稱和命令列引數,引數作為一個QStringList的單個字串。 另外,也可以使用setProgram()和setArguments()來執行,然後呼叫start()或open()

Qt 啟動外部程式

簡述 QProcess可以用來啟動外部程式,並與它們互動。 要啟動一個程序,通過呼叫start()來進行,引數包含程式的名稱和命令列引數,引數作為一個QStringList的單個字串。 另外,也可以使用setProgram()和setArguments()

QT 啟動外部程式 並傳參

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QString> #include <QProcess> MainWindow::MainWindow(QWidget *par

QT 啟動畫面

程式啟動之前有時候需要一段時間來載入, 為了避免使用者感覺程式宕機卡頓的情況,特別加上開機介面,提醒使用者程式正在執行中. int main(int argc, char *argv[]) { QApplication a(argc, argv); std::str

C#啟動外部程式的幾種常用方法彙總

轉自https://www.cnblogs.com/randyzhuwei/p/5403922.html 本文彙總了C#啟動外部程式的幾種常用方法,非常具有實用價值,主要包括如下幾種方法: 啟動外部程式,不等待其退出。 啟動外部程式,等待其退出。 啟動外部程式

Linux知識啟動外部應用方法

    一般啟動外部應用的方法有system,exec與popen。它們功能相似但使用上有所差別。 1. system #include <stdlib.h> int system(const char&nbs

QT啟動應用程式的方法

標頭檔案:#include <QProcess>#include <QDir>實現:void Language_Setting::reboot() { QString p

Qt程式設計呼叫外部程式開啟檔案

QDesktopServices::openUrl ( QUrl::fromLocalFile(fileName) );fileName:檔名,如C:/新建 Microsoft Word 文件.docQUrl::fromLocalFile()一定要用這個方法,因為檔名或路徑中

QT中呼叫外部程式的方法 QProcess類

QT4對於介面程式設計無疑是一個很方便的工具。但是由於它介面開發專項特性,可能導致了某些方面的不足(到目前為止暫時沒有使用到這類複雜功能,所以只能是推測)。這樣當整個程式需要某些功能時,就需要外部模組的支援。為了能夠與外部程式相互聯絡,Qt4提供了強大的外部程式呼叫類。先說說

QT中呼叫外部程式的方法

    我做的那個小軟體的圖形介面是基於QT3.2的,在主介面的命令列編輯框輸入命令以後要執行別人已經寫好的可執行檔案。這些可執行檔案執行的時間比較長,在終端上執行時會顯示一些執行的資訊,最後才顯示執行結果。我的介面上有一個文字框,我想把它們在後臺執行過程中的資訊不斷新增到文字框中,相當於實時顯示吧,不過要求

Qt中執行外部程式介紹 QProcess

第一種方法:使用QProcess類靜態函式QProcess::startDetached(const QString &program, constQStringList &argument)或者QProcess::execute(const QString &program, con

訪問桌面服務QDesktopServices && 啟動外部程式

QDesktopServices可以用來開啟一些桌面服務.比如開啟瀏覽器,開啟一些檔案等等.用法也非常簡單 //開啟一個瀏覽器,返回是否開啟成功 bool is_open = QDesktopServices::openUrl(QUrl("127.0.0.1"));

windows服務下啟動外部程式

1、緣由 公司要想做一個windows服務在檢測自家軟體的執行是否正常,如果不正常的話,就重新啟動它,所以涉及到了windows服務啟動外部程式的一個過程,但是進過測試,無法簡單的用process.start(),這樣的方式,主要原因是在vista和win7這樣的系統下,服

QT下呼叫外部程式

QT呼叫shell 或 外部程式有三種方法: 第一種方法,是呼叫linux C 函式庫中的 system(const char *string); system ("opt/ts_test"); 第二種方法: QProcess::execute ("opt/ts_test

delphi啟動外部程式執行結束

一、為什麼要啟動外部程式 也許,你想讓你的程式完成全部的功能。不過,無論從物力還是人力上,你都應養成資源共享的習慣。更好的考慮是,充分利用已有的程式,而讓你的程式專注於某一方面的功能。比如說,瀏覽器負責開啟網頁,讓人們瀏覽,當遇到下載的任務時,可以交給更專業的下載軟體去

Qt 設定應用程式圖示

簡述 應用程式圖示,通常顯示在應用程式的頂層視窗的左上角,通過呼叫QWindow:setWindowIcon()函式來實現。 為了改變可執行程式檔案本身的圖示,因為它被呈現在桌面上,必須採用另一種依賴於平臺的技術。 | 在Windows上設定應用程式圖

初學Qt--在C++程式中使用C函式

        今天碰到了需要在C++中使用C函式的問題,原先我以為直接在C++中引入C需要的標頭檔案,然後在C++中使用相關的C函式就可以了,可是今天真試了一下卻發現編譯器報錯:"xxxx"在此作用域中尚未宣告。費了好大勁才在網上找到了答案,原來要使用extern關鍵字來

QProcess 啟動外部程式

1. 堵塞執行QProcess process;  process.execute( "sub.exe", params );   process.waitForFinished();   execute 方法以堵塞方式執行程式,直到程式退出。2. 非同步執行process.start( "sub.exe",

QT 啟動並關閉外部程式 並傳參

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QString> #include <QProcess> MainWindow::MainWindow(QWidget *parent) : Q

Qt模組化筆記core——QProcess控制外部程式

QProcess是一個為程序間通訊建立的類。在linux相關係統中,可以很方便地用它呼叫執行命令。 它繼承自QIODevice.可以想像,它對其它程序的操作方式,就像讀寫一個檔案一樣方便。 下面瀏覽它的公共函式: QProcess(QObject * parent =