QProcess 類

The QProcess 類用於啓動外部程序並與之通信。 更多...

頭: #include <QProcess>
qmake: QT += core
繼承: QIODevice

注意: 此類的所有函數 可重入 .

公共類型

class CreateProcessArguments
typedef CreateProcessArgumentModifier
enum ExitStatus { NormalExit, CrashExit }
enum InputChannelMode { ManagedInputChannel, ForwardedInputChannel }
enum ProcessChannel { StandardOutput, StandardError }
enum ProcessChannelMode { SeparateChannels, MergedChannels, ForwardedChannels, ForwardedErrorChannel, ForwardedOutputChannel }
enum ProcessError { FailedToStart, Crashed, Timedout, WriteError, ReadError, UnknownError }
enum ProcessState { NotRunning, Starting, Running }

公共函數

QProcess (QObject * parent = Q_NULLPTR)
virtual ~QProcess ()
QStringList arguments () const
void closeReadChannel (ProcessChannel channel )
void closeWriteChannel ()
CreateProcessArgumentModifier createProcessArgumentsModifier () const
QProcess::ProcessError error () const
int exitCode () const
QProcess::ExitStatus exitStatus () const
InputChannelMode inputChannelMode () const
QString nativeArguments () const
ProcessChannelMode processChannelMode () const
QProcessEnvironment processEnvironment () const
qint64 processId () const
QString program () const
QByteArray readAllStandardError ()
QByteArray readAllStandardOutput ()
ProcessChannel readChannel () const
void setArguments (const QStringList & arguments )
void setCreateProcessArgumentsModifier (CreateProcessArgumentModifier modifier )
void setInputChannelMode (InputChannelMode mode )
void setNativeArguments (const QString & arguments )
void setProcessChannelMode (ProcessChannelMode mode )
void setProcessEnvironment (const QProcessEnvironment & environment )
void setProgram (const QString & program )
void setReadChannel (ProcessChannel channel )
void setStandardErrorFile (const QString & fileName , OpenMode mode = Truncate)
void setStandardInputFile (const QString & fileName )
void setStandardOutputFile (const QString & fileName , OpenMode mode = Truncate)
void setStandardOutputProcess (QProcess * destination )
void setWorkingDirectory (const QString & dir )
void start (const QString & program , const QStringList & arguments , OpenMode mode = ReadWrite)
void start (const QString & command , OpenMode mode = ReadWrite)
void start (OpenMode mode = ReadWrite)
QProcess::ProcessState state () const
bool waitForFinished (int msecs = 30000)
bool waitForStarted (int msecs = 30000)
QString workingDirectory () const

重實現公共函數

virtual bool atEnd () const
virtual qint64 bytesAvailable () const
virtual qint64 bytesToWrite () const
virtual bool canReadLine () const
virtual void close ()
virtual bool isSequential () const
virtual bool open (OpenMode mode = ReadWrite)
virtual bool waitForBytesWritten (int msecs = 30000)
virtual bool waitForReadyRead (int msecs = 30000)

公共槽

void kill ()
void terminate ()

信號

void errorOccurred (QProcess::ProcessError error )
void finished (int exitCode , QProcess::ExitStatus exitStatus )
void readyReadStandardError ()
void readyReadStandardOutput ()
void started ()
void stateChanged (QProcess::ProcessState newState )

靜態公共成員

int execute (const QString & program , const QStringList & arguments )
int execute (const QString & command )
QString nullDevice ()
bool startDetached (const QString & program , const QStringList & arguments , const QString & workingDirectory = QString(), qint64 * pid = Q_NULLPTR)
bool startDetached (const QString & command )
QStringList systemEnvironment ()

保護函數

void setProcessState (ProcessState state )
virtual void setupChildProcess ()

重實現保護函數

virtual qint64 readData (char * data , qint64 maxlen )
virtual qint64 writeData (const char * data , qint64 len )
typedef Q_PID

QT_NO_PROCESS_COMBINED_ARGUMENT_START

額外繼承成員

詳細描述

The QProcess 類用於啓動外部程序並與之通信。

運行進程

要啓動進程,把希望運行的程序名稱和命令行自變量作為自變量傳遞給 start ()。自變量被供給作為個體字符串在 QStringList .

另外,可以設置要運行的程序采用 setProgram () 和 setArguments (),然後調用 start () 或 open ().

例如,以下代碼片段通過在自變量列錶中傳遞包含 -style 和 fusion 的字符串在 X11 平颱運行 Fusion 風格的指針式時鍾範例:

    QObject *parent;
    ...
    QString program = "./path/to/Qt/examples/widgets/analogclock";
    QStringList arguments;
    arguments << "-style" << "fusion";
    QProcess *myProcess = new QProcess(parent);
    myProcess->start(program, arguments);
					

QProcess then enters the Starting state, and when the program has started, QProcess 進入 運行 狀態並發射 started ().

QProcess allows you to treat a process as a sequential I/O device. You can write to and read from the process just as you would access a network connection using QTcpSocket 。然後可以寫入進程標準輸入通過調用 write (),和讀取標準輸齣通過調用 read (), readLine (),和 getChar ()。因為它繼承 QIODevice , QProcess can also be used as an input source for QXmlReader ,或對於生成要上傳的數據使用 QNetworkAccessManager .

When the process exits, QProcess reenters the NotRunning 狀態 (初始狀態),並發射 finished ().

The finished () 信號以自變量形式提供進程退齣代碼和退齣狀態,也可以調用 exitCode () 以獲得最後完成進程的退齣代碼,和 exitStatus () to obtain its exit status. If an error occurs at any point in time, QProcess 將發射 errorOccurred () 信號。也可以調用 error () 以查找最後發生的錯誤類型,和 state () 以查找當前進程狀態。

注意: QProcess is not supported on VxWorks 、iOS、tvOS、watchOS 或 UWP (通用 Windows 平颱)。

憑藉通道通信

進程有 2 個預定義輸齣通道:標準輸齣通道 ( stdout ) 供給常規控製颱輸齣,和標準錯誤通道 ( stderr ) 通常提供由進程打印的錯誤。這些通道錶示 2 個單獨數據流。可以在它們之間切換通過調用 setReadChannel (). QProcess 發射 readyRead () 當當前讀取通道數據可用時。它還發射 readyReadStandardOutput () 當新標準輸齣數據可用時,和當新標準錯誤數據可用時, readyReadStandardError () 發射。代替調用 read (), readLine (),或 getChar (),可以明確讀取 2 通道之一的所有數據通過調用 readAllStandardOutput () 或 readAllStandardError ().

The terminology for the channels can be misleading. Be aware that the process's output channels correspond to QProcess 's read channels, whereas the process's input channels correspond to QProcess 's write channels. This is because what we read using QProcess is the process's output, and what we write becomes the process's input.

QProcess can merge the two output channels, so that standard output and standard error data from the running process both use the standard output channel. Call setProcessChannelMode () 采用 MergedChannels 在開始激活此特徵的進程之前。還有將正運行進程輸齣轉發到調用主進程的選項,通過傳遞 ForwardedChannels 作為自變量。隻轉發某個輸齣通道是可能的 - 通常會使用 ForwardedErrorChannel ,但 ForwardedOutputChannel 也存在。注意,在 GUI 應用程序中使用通道轉發通常是個壞主意 - 應該以圖形呈現錯誤取而代之。

某些進程需要特殊環境設置纔能運轉。可以為進程設置環境變量通過調用 setProcessEnvironment ()。要設置工作目錄,調用 setWorkingDirectory ()。默認情況下,進程在調用進程的當前工作目錄下運行。

The positioning and the screen Z-order of windows belonging to GUI applications started with QProcess are controlled by the underlying windowing system. For Qt 5 applications, the positioning can be specified using the -qwindowgeometry 命令行選項;X11 應用程序一般接受 -geometry 命令行選項。

注意: On QNX, setting the working directory may cause all application threads, with the exception of the QProcess caller thread, to temporarily freeze during the spawning process, owing to a limitation in the operating system.

同步進程 API

QProcess provides a set of functions which allow it to be used without an event loop, by suspending the calling thread until certain signals are emitted:

從主綫程調用這些函數 (綫程調用 QApplication::exec ()) 可能導緻用戶界麵被凍結。

以下範例運行 gzip 以壓縮字符串 Qt rocks!,沒有事件循環:

    QProcess gzip;
    gzip.start("gzip", QStringList() << "-c");
    if (!gzip.waitForStarted())
        return false;
    gzip.write("Qt rocks!");
    gzip.closeWriteChannel();
    if (!gzip.waitForFinished())
        return false;
    QByteArray result = gzip.readAll();
					

Windows 用戶注意事項

某些 Windows 命令 (例如, dir ) are not provided by separate applications, but by the command interpreter itself. If you attempt to use QProcess to execute these commands directly, it won't work. One possible solution is to execute the command interpreter itself ( cmd.exe 在某些 Windows 係統),和要求解釋器執行期望命令。

另請參閱 QBuffer , QFile ,和 QTcpSocket .

成員類型文檔編製

typedef QProcess:: CreateProcessArgumentModifier

注意: 此 typedef 隻可用於桌麵 Windows。

在 Windows, QProcess 使用 Win32 API 函數 CreateProcess 去啓動子級進程。而 QProcess 提供啓動進程的舒適方式而無需擔心平颱細節,在某些情況下調優是可取的將參數傳遞給 CreateProcess 。這被履行通過定義 CreateProcessArgumentModifier 函數並把它傳遞給 setCreateProcessArgumentsModifier .

A CreateProcessArgumentModifier 函數接受一參數:指針指嚮 CreateProcessArguments 結構。此結構的成員會被傳遞給 CreateProcess 後於 CreateProcessArgumentModifier 函數被調用。

以下範例演示如何把自定義標誌傳遞給 CreateProcess 。當從控製颱進程 A 啓動控製颱進程 B 時, QProcess 默認情況下,進程 B 將重用進程 A 的控製颱窗口。在此範例中,將為子級進程 B 創建具有自定義配色方案的新控製颱窗口。

    QProcess process;
    process.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
    {
        args->flags |= CREATE_NEW_CONSOLE;
        args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
        args->startupInfo->dwFlags |= STARTF_USEFILLATTRIBUTE;
        args->startupInfo->dwFillAttribute = BACKGROUND_BLUE | FOREGROUND_RED
                                           | FOREGROUND_INTENSITY;
    });
    process.start("C:\\Windows\\System32\\cmd.exe", QStringList() << "/k" << "title" << "The Child Process");
					

另請參閱 QProcess::CreateProcessArguments and setCreateProcessArgumentsModifier ().

enum QProcess:: ExitStatus

此枚舉描述不同退齣狀態為 QProcess .

常量 描述
QProcess::NormalExit 0 進程正常退齣。
QProcess::CrashExit 1 進程崩潰。

另請參閱 exitStatus ().

enum QProcess:: InputChannelMode

此枚舉描述進程輸入通道模式為 QProcess 。將這些值之一傳遞給 setInputChannelMode () 去設置當前寫入通道模式。

常量 描述
QProcess::ManagedInputChannel 0 QProcess 管理正運行進程的輸入。這是默認輸入通道模式為 QProcess .
QProcess::ForwardedInputChannel 1 QProcess 把主進程輸入轉發給正運行進程。子級進程從主進程的相同源讀取其標準輸入。注意:主進程不得試著讀取其標準輸入 (當子級進程正運行時)。

該枚舉在 Qt 5.2 引入或被修改。

另請參閱 setInputChannelMode ().

enum QProcess:: ProcessChannel

此枚舉描述正運行進程所使用的進程通道。傳遞這些值之一給 setReadChannel () 設置當前讀取通道為 QProcess .

常量 描述
QProcess::StandardOutput 0 正運行進程的 stdout (標準輸齣)。
QProcess::StandardError 1 正運行進程的 stderr (標準錯誤)。

另請參閱 setReadChannel ().

enum QProcess:: ProcessChannelMode

此枚舉描述進程的輸齣通道模式為 QProcess 。將這些值之一傳遞給 setProcessChannelMode () 以設置當前讀取通道模式。

常量 描述
QProcess::SeparateChannels 0 QProcess 管理正運行進程的輸齣,將標準輸齣和標準錯誤數據保持在單獨內部緩衝中。可以選擇 QProcess 的當前讀取通道通過調用 setReadChannel ()。這是默認通道模式對於 QProcess .
QProcess::MergedChannels 1 QProcess 將在運行進程的輸齣閤並到標準輸齣通道 ( stdout )。標準錯誤通道 ( stderr ) 將不接收任何數據。在運行進程的標準輸齣和標準錯誤數據是交錯的。
QProcess::ForwardedChannels 2 QProcess 將正運行進程的輸齣轉發到主進程。由子級進程寫入其標準輸齣和標準錯誤的任何內容,都將寫入主進程的標準輸齣和標準錯誤。
QProcess::ForwardedErrorChannel 4 QProcess 管理在運行進程的標準輸齣,但會將標準錯誤轉發到主進程。這反映將命令行工具作為過濾器的典型用法,其中標準輸齣被重定嚮到另一進程 (或文件),而標準錯誤被打印到控製颱為診斷目的 (該值在 Qt 5.2 引入)。
QProcess::ForwardedOutputChannel 3 與 ForwardedErrorChannel 互補 (該值在 Qt 5.2 引入)。

注意: Windows 有意抑製從僅 GUI 應用程序輸齣到繼承控製颱。這 not 適用於重定嚮到文件或管道的輸齣。盡管如此,要在控製颱轉發僅 GUI 應用程序的輸齣,必須使用 SeparateChannels 和通過讀取輸齣並將其寫入適當輸齣通道自己來履行轉發。

另請參閱 setProcessChannelMode ().

enum QProcess:: ProcessError

此枚舉描述錯誤的不同類型,報告通過 QProcess .

常量 描述
QProcess::FailedToStart 0 The process failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program.
QProcess::Crashed 1 進程有時崩潰在成功啓動後。
QProcess::Timedout 2 最後 waitFor...() 函數超時。狀態對於 QProcess 不變,和可以再次試著調用 waitFor...()。
QProcess::WriteError 4 發生錯誤當試圖寫入進程時。例如,進程可能未運行,或它可能已關閉其輸入通道。
QProcess::ReadError 3 發生錯誤當試圖從進程讀取時。例如,進程可能未運行。
QProcess::UnknownError 5 發生未知錯誤。這是默認返迴值為 error ().

另請參閱 error ().

enum QProcess:: ProcessState

此枚舉描述不同狀態為 QProcess .

常量 描述
QProcess::NotRunning 0 進程未運行。
QProcess::Starting 1 進程正在啓動,但尚未援引程序。
QProcess::Running 2 進程正在運行且讀寫就緒。

另請參閱 state ().

成員函數文檔編製

QProcess:: QProcess ( QObject * parent = Q_NULLPTR)

構造 QProcess 對象采用給定 parent .

[虛擬] QProcess:: ~QProcess ()

銷毀 QProcess 對象,即:殺除進程。

注意:此函數不會返迴直到進程被終止。

QStringList QProcess:: arguments () const

返迴上次啓動進程采用的命令行自變量。

該函數在 Qt 5.0 引入。

另請參閱 setArguments () 和 start ().

[虛擬] bool QProcess:: atEnd () const

重實現自 QIODevice::atEnd ().

返迴 true if the process is not running, and no more data is available for reading; otherwise returns false .

[虛擬] qint64 QProcess:: bytesAvailable () const

重實現自 QIODevice::bytesAvailable ().

[虛擬] qint64 QProcess:: bytesToWrite () const

重實現自 QIODevice::bytesToWrite ().

[虛擬] bool QProcess:: canReadLine () const

重實現自 QIODevice::canReadLine ().

此函數運轉於當前讀取通道。

另請參閱 readChannel () 和 setReadChannel ().

[虛擬] void QProcess:: close ()

重實現自 QIODevice::close ().

關閉進程的所有通信並殺除它。在調用此函數後, QProcess 將不再發射 readyRead (),且無法再讀取或寫入數據。

void QProcess:: closeReadChannel ( ProcessChannel channel )

關閉讀取通道 channel 。在調用此函數後, QProcess 將不再接收通道數據。任何已收到的數據仍可用於讀取。

調用此函數以節省內存,若對進程的輸齣不感興趣。

另請參閱 closeWriteChannel () 和 setReadChannel ().

void QProcess:: closeWriteChannel ()

調度寫入通道對於 QProcess 要被關閉。一旦所有數據被寫入進程,通道就將關閉。在調用此函數後,任何寫入進程的試圖都將失敗。

關閉寫入通道是必要的,對於讀取輸入數據 (直到通道被關閉為止) 的程序而言。例如,程序 more 用於在 Unix 和 Windows 控製颱中顯示文本數據。但它不會顯示文本數據直到 QProcess 的寫入通道被關閉。範例:

QProcess more;
more.start("more");
more.write("Text to display");
more.closeWriteChannel();
// QProcess will emit readyRead() once "more" starts printing
					

寫入通道被隱式打開當 start () 被調用。

另請參閱 closeReadChannel ().

CreateProcessArgumentModifier QProcess:: createProcessArgumentsModifier () const

返迴先前設置的 CreateProcess 修飾符函數。

注意: 此函數隻可用於 Windows 平颱。

該函數在 Qt 5.7 引入。

另請參閱 setCreateProcessArgumentsModifier () 和 QProcess::CreateProcessArgumentModifier .

QProcess::ProcessError QProcess:: error () const

返迴最後發生的錯誤類型。

另請參閱 state ().

[signal] void QProcess:: errorOccurred ( QProcess::ProcessError error )

此信號被發射當進程發生錯誤時。指定 error 描述發生的錯誤類型。

該函數在 Qt 5.6 引入。

[static] int QProcess:: execute (const QString & program , const QStringList & arguments )

啓動程序 program 采用自變量 arguments 在新進程中,等待它完成,然後返迴進程的退齣代碼。新進程寫入控製颱的任何數據會被轉發給調用進程。

環境和工作目錄繼承自調用進程。

自變量處理分彆等同 start () 重載。

若進程無法啓動,返迴 -2。若進程崩潰,返迴 -1。否則,返迴進程的退齣代碼。

另請參閱 start ().

[static] int QProcess:: execute (const QString & command )

這是重載函數。

啓動程序 command in a new process, waits for it to finish, and then returns the exit code.

自變量處理分彆等同 start () 重載。

之後 command 字符串被拆分並取消引號,此函數的行為像接受字符串列錶作為自變量的重載。

另請參閱 start ().

int QProcess:: exitCode () const

返迴最後完成進程的退齣代碼。

此值無效除非 exitStatus () 返迴 NormalExit .

QProcess::ExitStatus QProcess:: exitStatus () const

返迴最後完成的進程退齣狀態。

在 Windows,若進程被另一應用程序的 TerminateProcess() 所終止,此函數仍會返迴 NormalExit 除非退齣代碼小於 0。

該函數在 Qt 4.1 引入。

[signal] void QProcess:: finished ( int exitCode , QProcess::ExitStatus exitStatus )

此信號被發射當進程完成時。 exitCode 是進程的退齣代碼 (僅對正常退齣有效),和 exitStatus 是退齣狀態。在進程完成後,緩衝在 QProcess 仍完好無損。仍可以讀取進程可能已寫入的任何數據在完成之前。

注意: 信號 finished 在此類中是重載。要使用函數指針句法連接到此信號,必須在靜態鑄造中指定信號類型,如此範例所示:

connect(process, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
    [=](int exitCode, QProcess::ExitStatus exitStatus){ /* ... */ });
					

另請參閱 exitStatus ().

InputChannelMode QProcess:: inputChannelMode () const

返迴通道模式對於 QProcess 標準輸入通道。

該函數在 Qt 5.2 引入。

另請參閱 setInputChannelMode () 和 InputChannelMode .

[虛擬] bool QProcess:: isSequential () const

重實現自 QIODevice::isSequential ().

[slot] void QProcess:: kill ()

殺除當前進程,導緻它立即退齣。

在 Windows,kill() 使用 TerminateProcess,而在 Unix 和 macOS,把 SIGKILL 信號發送給進程。

另請參閱 terminate ().

QString QProcess:: nativeArguments () const

返迴程序的附加本機命令行自變量。

注意: 此函數隻可用於 Windows 平颱。

該函數在 Qt 4.7 引入。

另請參閱 setNativeArguments ().

[static] QString QProcess:: nullDevice ()

操作係統的 null 設備。

返迴的文件路徑使用本機目錄分隔符。

該函數在 Qt 5.2 引入。

另請參閱 QProcess::setStandardInputFile (), QProcess::setStandardOutputFile (),和 QProcess::setStandardErrorFile ().

[虛擬] bool QProcess:: open ( OpenMode mode = ReadWrite)

重實現自 QIODevice::open ().

啓動程序設置通過 setProgram () 采用自變量設置通過 setArguments ()。 OpenMode 被設為 mode .

此方法是彆名化的 start (),且存在僅為完全實現定義接口通過 QIODevice .

另請參閱 start (), setProgram (),和 setArguments ().

ProcessChannelMode QProcess:: processChannelMode () const

返迴通道模式對於 QProcess 標準輸齣和標準錯誤通道。

該函數在 Qt 4.2 引入。

另請參閱 setProcessChannelMode (), ProcessChannelMode ,和 setReadChannel ().

QProcessEnvironment QProcess:: processEnvironment () const

返迴環境從 QProcess 將傳遞給其子級進程,或空對象若沒有設置環境使用 setEnvironment() 或 setProcessEnvironment ()。若沒有設置環境,將使用調用進程的環境。

該函數在 Qt 4.6 引入。

另請參閱 setProcessEnvironment (), setEnvironment (),和 QProcessEnvironment::isEmpty ().

qint64 QProcess:: processId () const

返迴正在運行進程的本機進程標識符,若可用。若目前沒有進程正在運行, 0 被返迴。

該函數在 Qt 5.3 引入。

QString QProcess:: program () const

返迴進程最後一次啓動時采用的程序。

該函數在 Qt 5.0 引入。

另請參閱 setProgram () 和 start ().

QByteArray QProcess:: readAllStandardError ()

不管當前讀取通道,此函數從進程標準錯誤返迴所有可用數據按 QByteArray .

另請參閱 readyReadStandardError (), readAllStandardOutput (), readChannel (),和 setReadChannel ().

QByteArray QProcess:: readAllStandardOutput ()

不管當前讀取通道,此函數從進程標準輸齣返迴所有可用數據按 QByteArray .

另請參閱 readyReadStandardOutput (), readAllStandardError (), readChannel (),和 setReadChannel ().

ProcessChannel QProcess:: readChannel () const

返迴當前讀取通道為 QProcess .

另請參閱 setReadChannel ().

[virtual protected] qint64 QProcess:: readData ( char * data , qint64 maxlen )

重實現自 QIODevice::readData ().

[signal] void QProcess:: readyReadStandardError ()

此信號被發射當進程已使新數據可用透過其標準錯誤通道 ( stderr )。它被發射不管當前 讀取通道 .

注意: 這是私有信號。它可以用於信號連接,但不能由用戶發射。

另請參閱 readAllStandardError () 和 readChannel ().

[signal] void QProcess:: readyReadStandardOutput ()

此信號被發射當進程已使新數據可用透過其標準輸齣通道 ( stdout )。它被發射不管當前 讀取通道 .

注意: 這是私有信號。它可以用於信號連接,但不能由用戶發射。

另請參閱 readAllStandardOutput () 和 readChannel ().

void QProcess:: setArguments (const QStringList & arguments )

設置 arguments 以傳遞給被調用程序當啓動進程時。必須調用此函數先於 start ().

該函數在 Qt 5.1 引入。

另請參閱 start (), setProgram (),和 arguments ().

void QProcess:: setCreateProcessArgumentsModifier ( CreateProcessArgumentModifier modifier )

設置 modifier CreateProcess Win32 API 調用。傳遞 QProcess::CreateProcessArgumentModifier() 以移除先前設置的。

注意: 此函數隻可用於 Windows 平颱且要求 C++ 11。

該函數在 Qt 5.7 引入。

另請參閱 createProcessArgumentsModifier () 和 QProcess::CreateProcessArgumentModifier .

void QProcess:: setInputChannelMode ( InputChannelMode mode )

設置通道模式為 QProcess 標準輸入通道到 mode 指定。會使用此模式當下次 start () 被調用。

該函數在 Qt 5.2 引入。

另請參閱 inputChannelMode () 和 InputChannelMode .

void QProcess:: setNativeArguments (const QString & arguments )

這是重載函數。

設置額外本機命令行 arguments 為程序。

在操作係統中,若係統 API 用於傳遞命令行 arguments 到本機子進程使用單字符串,可以設想無法傳遞命令行憑藉 QProcess 基於列錶的可移植 API。在這種情況下,必須使用此函數來設置字符串, appended 到通常由自變量列錶閤成的字符串,帶定界空格。

注意: 此函數隻可用於 Windows 平颱。

該函數在 Qt 4.7 引入。

另請參閱 nativeArguments ().

void QProcess:: setProcessChannelMode ( ProcessChannelMode mode )

設置通道模式為 QProcess 標準輸齣和標準錯誤通道到 mode 指定。會使用此模式當下次 start () 被調用。例如:

QProcess builder;
builder.setProcessChannelMode(QProcess::MergedChannels);
builder.start("make", QStringList() << "-j2");
if (!builder.waitForFinished())
    qDebug() << "Make failed:" << builder.errorString();
else
    qDebug() << "Make output:" << builder.readAll();
					

該函數在 Qt 4.2 引入。

另請參閱 processChannelMode (), ProcessChannelMode ,和 setReadChannel ().

void QProcess:: setProcessEnvironment (const QProcessEnvironment & environment )

設置 environment that QProcess 將傳遞給子級進程。

例如,以下代碼添加環境變量 TMPDIR :

QProcess process;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
process.setProcessEnvironment(env);
process.start("myapp");
					

注意,在 Windows 環境變量名不區分大小寫。

該函數在 Qt 4.6 引入。

另請參閱 processEnvironment (), QProcessEnvironment::systemEnvironment (),和 setEnvironment ().

[protected] void QProcess:: setProcessState ( ProcessState state )

設置當前狀態為 QProcess state 指定。

另請參閱 state ().

void QProcess:: setProgram (const QString & program )

設置 program 為使用當啓動進程時。此函數必須被調用先於 start ().

該函數在 Qt 5.1 引入。

另請參閱 start (), setArguments (),和 program ().

void QProcess:: setReadChannel ( ProcessChannel channel )

設置當前讀取通道為 QProcess 到給定 channel 。當前輸入通道用於函數 read (), readAll (), readLine (),和 getChar ()。它還確定哪個通道觸發 QProcess 以發射 readyRead ().

另請參閱 readChannel ().

void QProcess:: setStandardErrorFile (const QString & fileName , OpenMode mode = Truncate)

將進程的標準錯誤重定嚮到文件 fileName 。當重定嚮到位時,標準錯誤讀取通道被關閉:讀取它使用 read () 將始終失敗,就像 readAllStandardError ()。文件將被追加若 mode 為 Append,否則, 它將被截取。

setStandardOutputFile () 瞭解如何打開文件的更多相關信息。

注意:若 setProcessChannelMode () 被調用采用自變量 QProcess::MergedChannels ,此函數不起作用。

該函數在 Qt 4.2 引入。

另請參閱 setStandardInputFile (), setStandardOutputFile (),和 setStandardOutputProcess ().

void QProcess:: setStandardInputFile (const QString & fileName )

將進程的標準輸入重定嚮到文件指示通過 fileName 。當輸入重定嚮到位時, QProcess 對象將處於隻讀模式 (調用 write () 將導緻齣錯)。

要使進程立即讀取 EOF,傳遞 nullDevice () 在此。這更清潔比使用 closeWriteChannel () 在寫入任何數據之前,因為在啓動進程之前可以設置它。

若文件 fileName 不存在此刻 start () 被調用或不可讀,啓動進程將失敗。

在進程啓動後調用 setStandardInputFile() 不起作用。

該函數在 Qt 4.2 引入。

另請參閱 setStandardOutputFile (), setStandardErrorFile (),和 setStandardOutputProcess ().

void QProcess:: setStandardOutputFile (const QString & fileName , OpenMode mode = Truncate)

將進程的標準輸齣重定嚮到文件 fileName 。當重定嚮到位時,標準輸齣讀取通道被關閉:讀取它使用 read () 將始終失敗,就像 readAllStandardOutput ().

要丟棄來自進程的所有標準輸齣,傳遞 nullDevice () 在此。這比簡單從不讀取標準輸齣更高效,因為沒有 QProcess 緩衝被填充。

若文件 fileName 不存在此刻 start () 被調用,它將被創建。若它無法被創建,啓動將失敗。

若文件存在且 mode is QIODevice::Truncate , the file will be truncated. Otherwise (if mode is QIODevice::Append ), the file will be appended to.

在進程啓動後調用 setStandardOutputFile() 不起作用。

該函數在 Qt 4.2 引入。

另請參閱 setStandardInputFile (), setStandardErrorFile (),和 setStandardOutputProcess ().

void QProcess:: setStandardOutputProcess ( QProcess * destination )

將此進程的標準輸齣流管道到 destination 進程的標準輸入。

以下 Shell 命令:

command1 | command2
					

可以施行采用 QProcess 通過以下代碼:

QProcess process1;
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("command1");
process2.start("command2");
					

該函數在 Qt 4.2 引入。

void QProcess:: setWorkingDirectory (const QString & dir )

把工作目錄設為 dir . QProcess 將在此目錄下啓動進程。默認行為是在調用進程的工作目錄下啓動進程。

注意: 在 QNX,這可能導緻所有應用程序綫程被臨時凍結。

另請參閱 workingDirectory () 和 start ().

[virtual protected] void QProcess:: setupChildProcess ()

此函數在子級進程上下文中被調用,恰好在 Unix 或 macOS 程序執行前 (即:後於 fork() ,但先於 execve() )。重實現此函數,以履行最後時刻初始化子級進程。範例:

class SandboxProcess : public QProcess
{
    ...
 protected:
     void setupChildProcess();
    ...
};
void SandboxProcess::setupChildProcess()
{
    // Drop all privileges in the child process, and enter
    // a chroot jail.
#if defined Q_OS_UNIX
    ::setgroups(0, 0);
    ::chroot("/etc/safe");
    ::chdir("/");
    ::setgid(safeGid);
    ::setuid(safeUid);
    ::umask(0);
#endif
}
					

無法退齣進程 (例如:通過調用 exit()) 從此函數。若需要在開始執行前停止程序,解決方案是發射 finished () 然後調用 exit()。

警告: 此函數被調用通過 QProcess 僅在 Unix 和 macOS。在 Windows 和 QNX,它不被調用。

void QProcess:: start (const QString & program , const QStringList & arguments , OpenMode mode = ReadWrite)

啓動給定 program 在新進程中,傳遞的命令行自變量在 arguments .

The QProcess 對象將立即進入 Starting 狀態。若進程成功啓動, QProcess 將發射 started ();否則, errorOccurred () 會被發射。

注意: 進程是異步啓動的,這意味著 started () 和 errorOccurred () 信號可能被延遲。調用 waitForStarted () 以確保進程已啓動 (或啓動失敗) 且這些信號已被發射。

注意: 不履行進一步的自變量分割。

Windows: 自變量加引號並被拼接到兼容命令行采用 CommandLineToArgvW() Windows 函數。對於有不同命令行要求加引號的程序,需要使用 setNativeArguments ()。值得注意的是程序不遵循 CommandLineToArgvW() 規則是 cmd.exe,因此是所有批處理腳本。

The OpenMode 被設為 mode .

QProcess 對象已在運行進程,可能在控製颱打印警告,且現有進程將不受影響地繼續運行。

另請參閱 processId (), started (), waitForStarted (),和 setNativeArguments ().

void QProcess:: start (const QString & command , OpenMode mode = ReadWrite)

這是重載函數。

啓動命令 command 按新進程。 OpenMode 被設為 mode .

command 是包含程序名稱及其自變量的單文本字符串。自變量由一個或多個空格分隔。例如:

QProcess process;
process.start("del /s *.txt");
// same as process.start("del", QStringList() << "/s" << "*.txt");
...
					

必須引用包含空格的自變量纔能被正確提供給新進程。例如:

QProcess process;
process.start("dir \"My Documents\"");
					

文字引號在 command 字符串由 3 引號錶示。例如:

QProcess process;
process.start("dir \"Epic 12\"\"\" Singles\"");
					

之後 command 字符串被拆分並取消引號,此函數的行為像接受字符串列錶作為自變量的重載。

可以禁用此重載通過定義 QT_NO_PROCESS_COMBINED_ARGUMENT_START when you compile your applications. This can be useful if you want to ensure that you are not splitting arguments unintentionally, for example. In virtually all cases, using the other overload is the preferred method.

在將命令行自變量傳遞給子進程的本機係統 API 使用單字符串的 Windows 操作係統,可以設想無法傳遞命令行憑藉 QProcess 的基於列錶的可移植 API。在這些罕見情況下,需要使用 setProgram () 和 setNativeArguments () 而不是此函數。

void QProcess:: start ( OpenMode mode = ReadWrite)

這是重載函數。

啓動程序設置通過 setProgram () 采用自變量設置通過 setArguments ()。 OpenMode 被設為 mode .

該函數在 Qt 5.1 引入。

另請參閱 open (), setProgram (),和 setArguments ().

[static] bool QProcess:: startDetached (const QString & program , const QStringList & arguments , const QString & workingDirectory = QString(), qint64 * pid = Q_NULLPTR)

啓動程序 program 采用自變量 arguments 按新進程中,並與之分離。返迴 true 當成功時;否則返迴 false 。若調用進程退齣,分離進程將不受影響地繼續運行。

自變量處理分彆等同 start () 重載。

Unix: 啓動進程將在它自己的會話中運行,且行動像守護程序。

進程將被啓動在目錄 workingDirectory 。若 workingDirectory 為空,工作目錄繼承自調用進程。

注意: 在 QNX,這可能導緻所有應用程序綫程被臨時凍結。

若函數成功,那麼 * pid 被設為啓動進程的進程標識符。

另請參閱 start ().

[static] bool QProcess:: startDetached (const QString & command )

這是重載函數。

啓動命令 command 按新進程中,並與之分離。返迴 true 當成功時;否則返迴 false .

自變量處理分彆等同 start () 重載。

之後 command 字符串被拆分並取消引號,此函數的行為像接受字符串列錶作為自變量的重載。

另請參閱 start (const QString &command, OpenMode mode).

[signal] void QProcess:: started ()

此信號發射由 QProcess 當此過程已開始,且 state () 返迴 運行 .

注意: 這是私有信號。它可以用於信號連接,但不能由用戶發射。

QProcess::ProcessState QProcess:: state () const

返迴進程的當前狀態。

另請參閱 stateChanged () 和 error ().

[signal] void QProcess:: stateChanged ( QProcess::ProcessState newState )

此信號發射每當狀態對於 QProcess 改變。 newState 自變量為狀態 QProcess 要改變。

注意: 這是私有信號。它可以用於信號連接,但不能由用戶發射。

[static] QStringList QProcess:: systemEnvironment ()

以 key=value 對列錶形式返迴調用進程的環境。範例:

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

此函數不緩存係統環境。因此,獲得環境的更新版本是可能的,若低級 C 庫函數像 setenv or putenv 有被調用。

不管怎樣,注意,重復調用此函數將重新創建環境變量列錶 (非通俗操作)。

注意: 對於新代碼,推薦使用 QProcessEnvironment::systemEnvironment ()

該函數在 Qt 4.1 引入。

另請參閱 QProcessEnvironment::systemEnvironment () 和 setProcessEnvironment ().

[slot] void QProcess:: terminate ()

試圖終止進程。

進程可能不會因調用此函數而退齣 (它有機會提示用戶是否有未保存的文件,等等)。

在 Windows,terminate() 將 WM_CLOSE 消息張貼到進程的所有頂層窗口,然後張貼到進程本身的主綫程。在 Unix 和 macOS, SIGTERM 信號被發送。

不運行事件循環的 Windows 控製颱應用程序 (或其事件循環不處理 WM_CLOSE 消息),隻可被終止通過調用 kill ().

另請參閱 kill ().

[虛擬] bool QProcess:: waitForBytesWritten ( int msecs = 30000)

重實現自 QIODevice::waitForBytesWritten ().

bool QProcess:: waitForFinished ( int msecs = 30000)

阻塞直到進程已完成且 finished () 信號已發射,或直到 msecs 毫秒已過去。

返迴 true 若進程已完成;否則返迴 false (若操作超時,若發生錯誤,或者若此 QProcess 已完成)。

可以在沒有事件循環的情況下操作此函數。它很有用,當編寫非 GUI 應用程序和在非 GUI 綫程中履行 I/O 操作時。

警告: 從主 GUI 綫程調用此函數可能導緻用戶界麵被凍結。

若 msecs 為 -1,此函數不會超時。

另請參閱 finished (), waitForStarted (), waitForReadyRead (),和 waitForBytesWritten ().

[虛擬] bool QProcess:: waitForReadyRead ( int msecs = 30000)

重實現自 QIODevice::waitForReadyRead ().

bool QProcess:: waitForStarted ( int msecs = 30000)

阻塞直到進程啓動且 started () 信號已發射,或直到 msecs 毫秒已過去。

返迴 true 若進程成功啓動;否則返迴 false (若操作超時或齣現錯誤)。

可以在沒有事件循環的情況下操作此函數。它很有用,當編寫非 GUI 應用程序和在非 GUI 綫程中履行 I/O 操作時。

警告: 從主 GUI 綫程調用此函數可能導緻用戶界麵被凍結。

若 msecs 為 -1,此函數不會超時。

注意: 在某些 UNIX 操作係統,此函數可能返迴 true 但進程可能稍後報告 QProcess::FailedToStart 錯誤。

另請參閱 started (), waitForReadyRead (), waitForBytesWritten (),和 waitForFinished ().

QString QProcess:: workingDirectory () const

QProcess 已賦值工作目錄,此函數返迴工作目錄 QProcess 將在程序開始之前進入。否則,返迴空字符串 (即:沒有賦值目錄),且 QProcess 將使用應用程序的當前工作目錄取而代之。

另請參閱 setWorkingDirectory ().

[virtual protected] qint64 QProcess:: writeData (const char * data , qint64 len )

重實現自 QIODevice::writeData ().

相關非成員

typedef Q_PID

用於錶示底層平颱進程的標識符 typedef。在 Unix,這相當於 qint64 ;在 Windows,它相當於 _PROCESS_INFORMATION* .

另請參閱 QProcess::pid ().

宏文檔編製

QT_NO_PROCESS_COMBINED_ARGUMENT_START

禁用 QProcess::start() overload taking a single string. In most cases where it is used, the user intends for the first argument to be treated atomically as per the other overload.

該函數在 Qt 5.6 引入。

另請參閱 QProcess::start (const QString &command, OpenMode mode).