이 페이지에서

QProcess Class

QProcess 클래스는 외부 프로그램을 실행하고 해당 프로그램과 통신하는 데 사용됩니다. 더 보기...

헤더: #include <QProcess>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QIODevice

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 유형

struct CreateProcessArguments
(since 6.6) struct UnixProcessParameters
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 }
(since 6.6) enum class UnixProcessFlag { CloseFileDescriptors, CreateNewSession, DisconnectControllingTerminal, IgnoreSigPipe, ResetIds, …, DisableCoreDumps }
flags UnixProcessFlags

공개 함수

QProcess(QObject *parent = nullptr)
virtual ~QProcess()
QStringList arguments() const
(since 6.0) std::function<void ()> childProcessModifier() const
void closeReadChannel(QProcess::ProcessChannel channel)
void closeWriteChannel()
QProcess::CreateProcessArgumentModifier createProcessArgumentsModifier() const
QProcess::ProcessError error() const
int exitCode() const
QProcess::ExitStatus exitStatus() const
(since 6.7) void failChildProcessModifier(const char *description, int error = 0)
QProcess::InputChannelMode inputChannelMode() const
QString nativeArguments() const
QProcess::ProcessChannelMode processChannelMode() const
QProcessEnvironment processEnvironment() const
qint64 processId() const
QString program() const
QByteArray readAllStandardError()
QByteArray readAllStandardOutput()
QProcess::ProcessChannel readChannel() const
void setArguments(const QStringList &arguments)
(since 6.0) void setChildProcessModifier(const std::function<void ()> &modifier)
void setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)
void setInputChannelMode(QProcess::InputChannelMode mode)
void setNativeArguments(const QString &arguments)
void setProcessChannelMode(QProcess::ProcessChannelMode mode)
void setProcessEnvironment(const QProcessEnvironment &environment)
void setProgram(const QString &program)
void setReadChannel(QProcess::ProcessChannel channel)
void setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
void setStandardInputFile(const QString &fileName)
void setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
void setStandardOutputProcess(QProcess *destination)
(since 6.6) void setUnixProcessParameters(const QProcess::UnixProcessParameters &params)
(since 6.6) void setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)
void setWorkingDirectory(const QString &dir)
void start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)
void start(QIODeviceBase::OpenMode mode = ReadWrite)
(since 6.0) void startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)
bool startDetached(qint64 *pid = nullptr)
QProcess::ProcessState state() const
(since 6.6) QProcess::UnixProcessParameters unixProcessParameters() const
bool waitForFinished(int msecs = 30000)
bool waitForStarted(int msecs = 30000)
QString workingDirectory() const

재구현된 공용 함수

virtual qint64 bytesToWrite() const override
virtual void close() override
virtual bool isSequential() const override
virtual bool open(QIODeviceBase::OpenMode mode = ReadWrite) override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

공개 슬롯

void kill()
void terminate()

신호

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

정적 공용 멤버

int execute(const QString &program, const QStringList &arguments = {})
QString nullDevice()
QStringList splitCommand(QStringView command)
bool startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)
QStringList systemEnvironment()

보호된 함수

void setProcessState(QProcess::ProcessState state)

재구현된 보호 함수

virtual qint64 readData(char *data, qint64 maxlen) override

상세 설명

프로세스 실행

프로세스를 시작하려면 실행하려는 프로그램의 이름과 명령줄 인수를 start()의 인수로 전달하십시오. 인수는 QStringList 에 개별 문자열로 포함됩니다.

또는 setProgram() 및 setArguments()을 사용하여 프로그램을 실행하도록 설정한 다음, start() 또는 open()를 호출할 수도 있습니다.

예를 들어, 다음 코드 조각은 인자 목록에 "-style"과 "fusion"이 포함된 문자열을 두 개의 항목으로 전달하여 X11 플랫폼에서 Fusion 스타일의 아날로그 시계 예제를 실행합니다:

    QObject *parent = new QObject;
    ...
    QString program = "./path/to/Qt/examples/widgets/analogclock";
    QStringList arguments;
    arguments << "-style" << "fusion";

    QProcess *myProcess = new QProcess(parent);
    myProcess->start(program, arguments);

그러면 QProcess는 Starting 상태로 전환되며, 프로그램이 시작되면 QProcess는 Running 상태로 전환되고 started()를 발생시킵니다.

QProcess를 사용하면 프로세스를 순차 I/O 장치로 취급할 수 있습니다. QTcpSocket 를 사용하여 네트워크 연결에 액세스하는 것과 마찬가지로, 프로세스에 데이터를 쓰거나 프로세스에서 데이터를 읽을 수 있습니다. 그런 다음 write()를 호출하여 프로세스의 표준 입력에 데이터를 쓸 수 있으며, read(), readLine(), getChar()를 호출하여 표준 출력을 읽을 수 있습니다. QProcess는 QIODevice 를 상속받기 때문에, QXmlReader 의 입력 소스로 사용하거나 QNetworkAccessManager 를 사용하여 업로드할 데이터를 생성하는 데에도 사용할 수 있습니다.

프로세스가 종료되면 QProcess는 NotRunning 상태(초기 상태)로 다시 진입하며, finished() 신호를 발생시킵니다.

finished() 신호는 프로세스의 종료 코드와 종료 상태를 인자로 제공하며, exitCode()를 호출하여 마지막으로 완료된 프로세스의 종료 코드를, exitStatus()를 호출하여 해당 프로세스의 종료 상태를 얻을 수도 있습니다. 어느 시점에서든 오류가 발생하면 QProcess는 errorOccurred() 신호를 방출합니다. 또한 error()을 호출하여 마지막으로 발생한 오류의 유형을 확인할 수 있으며, state()을 호출하여 현재 프로세스 상태를 확인할 수 있습니다.

참고: QProcess는 VxWorks, iOS, tvOS 또는 watchOS에서는 지원되지 않습니다.

실행 파일 찾기

실행할 프로그램은 ` setProgram()`를 호출하거나 ` start()` 호출에서 직접 설정할 수 있습니다. 프로그램 이름과 인수를 사용하여 ` start()`를 호출하는 효과는, 해당 함수 전에 ` setProgram()`와 ` setArguments()`를 호출한 다음, 해당 매개변수 없이 오버로드를 호출하는 것과 동일합니다.

QProcess는 유닉스 셸과 Windows 명령어 해석기가 각자의 명령줄에서 작동하는 방식과 유사하게, 프로그램 이름을 다음 세 가지 방법 중 하나로 해석합니다:

  • 프로그램 이름이 절대 경로인 경우, 해당 실행 파일이 정확히 실행되며 QProcess는 별도의 검색을 수행하지 않습니다.
  • 프로그램 이름이 하나 이상의 경로 구성 요소를 포함하는 상대 경로(즉, 슬래시가 적어도 하나 포함된 경우)인 경우, 해당 상대 경로를 검색할 시작 디렉터리는 운영 체제에 따라 다릅니다. Windows에서는 부모 프로세스의 현재 작업 디렉터리이며, Unix에서는 setWorkingDirectory()로 설정된 디렉터리입니다.
  • 프로그램 이름이 슬래시가 없는 일반 파일 이름인 경우, 동작 방식은 운영 체제에 따라 다릅니다. 유닉스 시스템에서는 QProcess가 PATH 환경 변수를 검색하며, 윈도우에서는 OS가 검색을 수행하여 PATH 환경 변수를 확인하기 전에 먼저 부모 프로세스의 현재 디렉터리를 검색합니다(전체 목록은 CreateProcess 문서를 참조하십시오).

플랫폼에 따라 달라지는 동작이나 현재 애플리케이션이 실행된 방식과 관련된 문제를 피하려면, 실행할 실행 파일에 항상 절대 경로를 전달하는 것이 좋습니다. 애플리케이션과 함께 제공되는 보조 바이너리의 경우, QCoreApplication::applicationDirPath()로 시작하는 경로를 구성할 수 있습니다. 마찬가지로, setWorkingDirectory()로 설정된 디렉터리를 기준으로 상대 경로에 있는 실행 파일을 명시적으로 실행하려면, 상황에 따라 "./" 또는 "../"로 시작하는 프로그램 경로를 사용하십시오.

Windows에서는 CreateProcess 문서에 명시된 경우를 제외하고 대부분의 용도에서 ".exe" 확장자가 필요하지 않습니다. 또한 QProcess는 프로그램 이름에서 유닉스 스타일의 슬래시(/)를 Windows 경로 표기법의 백슬래시(\)로 변환합니다. 이를 통해 위 예제에서 볼 수 있듯이 QProcess를 사용하는 코드를 크로스 플랫폼 방식으로 작성할 수 있습니다.

QProcess는 cmd.exe 의 dir 명령어나 Bourne 셸의 export 와 같은 유닉스 셸 또는 윈도우 명령어 해석기의 내장 함수를 직접 실행하는 것을 지원하지 않습니다. 유닉스에서는 많은 셸 내장 명령이 별도의 실행 파일로도 제공되지만, 그 동작은 내장 명령으로 구현된 것과는 다를 수 있습니다. 이러한 명령을 실행하려면 적절한 옵션을 지정하여 인터프리터를 명시적으로 실행해야 합니다. 유닉스 시스템의 경우, "/bin/sh"를 두 개의 인자, 즉 "-c"와 실행할 명령줄 문자열과 함께 실행하십시오. 윈도우의 경우, cmd.exe 가 명령줄을 비표준 방식으로 구문 분석하므로, setNativeArguments()를 사용하십시오(예: "/c dir d:").

환경 변수

QProcess API는 자식 프로세스가 인식하게 될 환경 변수를 조작하는 메서드를 제공합니다. 기본적으로 자식 프로세스는 start() 함수가 호출된 시점에 존재하는 현재 프로세스의 환경 변수 사본을 갖게 됩니다. 즉, 해당 호출 전에 qputenv()를 사용하여 수행한 모든 수정은 자식 프로세스의 환경에 반영됩니다. QProcess는 다른 스레드에서 발생하는 qputenv()과의 경합 조건을 방지하지 않으므로, 애플리케이션의 초기 시작 후에는 qputenv() 사용을 피하는 것이 좋습니다.

특정 자식 프로세스의 환경은 QProcessEnvironment 클래스를 사용하는 processEnvironment() 및 setProcessEnvironment() 함수를 통해 수정할 수 있습니다. 기본적으로 processEnvironment()는 QProcessEnvironment::inheritsFromParent()가 true인 객체를 반환합니다. 부모로부터 상속받지 않는 환경을 설정하면, QProcess는 자식 프로세스가 시작될 때 정확히 그 환경을 사용하게 됩니다.

일반적인 시나리오는 QProcessEnvironment::systemEnvironment()를 호출하여 현재 환경에서 시작하고, 이후 특정 변수를 추가, 변경 또는 제거하는 방식으로 진행됩니다. 이렇게 생성된 변수 목록은 setProcessEnvironment()를 통해 QProcess에 적용할 수 있습니다.

QProcessEnvironment()의 기본 생성자를 사용하여 환경에서 모든 변수를 제거하거나 빈 환경으로 시작할 수도 있습니다. 그러나 현재 프로세스 환경에 설정되어 있고 자식 프로세스의 정상적인 실행에 필요한 시스템 변수가 있을 수 있으므로, 통제된 환경이나 시스템별 특수한 조건을 제외하고는 이를 권장하지 않습니다.

Windows에서 QProcess는 현재 프로세스의 ` "PATH" ` 및 ` "SystemRoot" ` 환경 변수가 설정되어 있지 않은 경우 이를 복사합니다. 이 변수들을 완전히 해제할 수는 없지만, 빈 값으로 설정하는 것은 가능합니다. Windows에서 ` "PATH" `을 빈 값으로 설정하면 자식 프로세스가 시작되지 않을 가능성이 높습니다.

채널을 통한 통신

프로세스에는 두 개의 미리 정의된 출력 채널이 있습니다. 표준 출력 채널(stdout)은 일반적인 콘솔 출력을 제공하며, 표준 오류 채널(stderr)은 일반적으로 프로세스가 출력하는 오류 메시지를 제공합니다. 이 채널들은 서로 별개의 두 데이터 스트림을 나타냅니다. setReadChannel()를 호출하여 이 두 채널 간을 전환할 수 있습니다. QProcess는 현재 읽기 채널에 데이터가 있을 때 readyRead()를 발생시킵니다. 또한 새로운 표준 출력 데이터가 있을 때는 readyReadStandardOutput()를 발생시키고, 새로운 표준 오류 데이터가 있을 때는 readyReadStandardError()를 발생시킵니다. read(), readLine, 또는 getChar()를 호출하는 대신, readAllStandardOutput() 또는 readAllStandardError()를 호출하여 두 채널 중 하나에서 모든 데이터를 명시적으로 읽을 수 있습니다.

채널에 대한 용어는 오해를 불러일으킬 수 있습니다. 프로세스의 출력 채널은 QProcess의 읽기 채널에 해당하고, 프로세스의 입력 채널은 QProcess의 쓰기 채널에 해당한다는 점에 유의하십시오. 이는 QProcess를 사용하여 읽는 것이 프로세스의 출력이고, 쓰는 것이 프로세스의 입력이 되기 때문입니다.

QProcess는 두 개의 출력 채널을 병합할 수 있으므로, 실행 중인 프로세스의 표준 출력 및 표준 오류 데이터가 모두 표준 출력 채널을 사용하게 됩니다. 이 기능을 활성화하려면 프로세스를 시작하기 전에 ` MergedChannels `를 인수로 전달하여 ` setProcessChannelMode()`를 호출하십시오. 또한 ForwardedChannels 를 인수로 전달하여 실행 중인 프로세스의 출력을 호출한 메인 프로세스로 전달할 수도 있습니다. 출력 채널 중 하나만 전달하는 것도 가능하며, 일반적으로 ForwardedErrorChannel 를 사용하지만 ForwardedOutputChannel 도 존재합니다. GUI 애플리케이션에서는 채널 전달을 사용하는 것이 일반적으로 좋지 않은 방법이라는 점에 유의하십시오. 대신 오류는 그래픽으로 표시해야 합니다.

특정 프로세스는 정상적으로 작동하기 위해 특별한 환경 설정이 필요합니다. setProcessEnvironment()를 호출하여 프로세스에 대한 환경 변수를 설정할 수 있습니다. 작업 디렉터리를 설정하려면 setWorkingDirectory()를 호출하십시오. 기본적으로 프로세스는 호출하는 프로세스의 현재 작업 디렉터리에서 실행됩니다.

QProcess로 시작된 Qt GUI 애플리케이션에 속한 창의 위치와 화면 Z 순서는 기본 윈도우 시스템에 의해 제어됩니다. Qt 5 애플리케이션의 경우, -qwindowgeometry 명령줄 옵션을 사용하여 위치를 지정할 수 있습니다. X11 애플리케이션은 일반적으로 -geometry 명령줄 옵션을 지원합니다.

동기식 프로세스 API

QProcess는 특정 신호가 발생될 때까지 호출 스레드를 일시 중지함으로써, 이벤트 루프 없이 사용할 수 있도록 하는 일련의 함수를 제공합니다:

  • waitForStarted()는 프로세스가 시작될 때까지 대기합니다.
  • waitForReadyRead()는 현재 읽기 채널에서 읽을 수 있는 새 데이터가 준비될 때까지 대기합니다.
  • waitForBytesWritten()는 프로세스에 데이터 페이로드 하나가 기록될 때까지 차단됩니다.
  • waitForFinished()는 프로세스가 완료될 때까지 차단됩니다.

메인 스레드( 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();

보안 고려 사항

프로그램 이름, 인자, 환경 및 작업 디렉터리는 신뢰할 수 없는 소스(네트워크, 신뢰할 수 없는 파일, 다른 사용자가 제어하는 애플리케이션)에서 제공된 경우, 항상 유해한 입력으로 간주해야 합니다. QProcess가 시작하는 프로세스는 호출하는 애플리케이션의 모든 권한으로 실행됩니다.

프로그램 이름 확인

가능한 경우, 프로그램 이름으로 절대 경로를 전달하십시오. 일반 파일 이름은 유닉스에서는 PATH 환경 변수를 통해, 윈도우에서는 운영 체제의 검색 순서(역사적으로 현재 디렉터리와 PATH 를 포함함)에 따라 해결되므로, PATH 를 조작하거나 검색 대상 디렉터리에 파일을 넣을 수 있는 공격자는 어떤 바이너리가 실행될지 선택할 수 있습니다. 바이너리 조회 과정에 대한 자세한 내용은 Finding the Executable 을 참조하십시오.

인수 처리

start() 또는 setArguments()을 통해 인수를 별도의 목록 요소로 전달하십시오. 신뢰할 수 없는 구성 요소로 단일 명령 문자열을 절대 조합하지 마십시오. Unix에서는 쉘을 거치지 않고 인수가 개별 argv 항목으로 그대로 자식 프로세스에 전달되므로, &, |, ; 또는 $ 와 같은 문자는 특별한 의미를 가지지 않습니다. Windows에서 QProcess는 CommandLineToArgvW() Win32 함수가 정한 규칙에 따라 인수를 적절하게 따옴표로 묶고 이스케이프 처리합니다. 두 OS 모두에서 QProcess는 자동으로 셸을 사용하지 않습니다.

splitCommand() 및 startCommand()를 사용할 때는, 이들의 토큰화 및 이스케이프 규칙이 Windows 및 POSIX 셸의 규칙과 다르다는 점에 유의해야 합니다. 잘못 이스케이프된 입력은 인자 주입의 가능성을 열어둡니다.

셸 및 배치 파일 실행

Windows에서는 신뢰할 수 없는 인수를 배치 파일(.bat 또는 .cmd)이나 cmd.exe 에 전달하지 마십시오. 대신 setNativeArguments()을 사용하고 직접 따옴표 처리 및 이스케이프 처리를 하는 것이 좋습니다. QProcess는 CommandLineToArgvW() 규칙에 따라 인수를 따옴표로 묶지만, cmd.exe 는 명령줄을 다르게 파싱하며 %, ^, &, |, <, >, (, ) 와 같은 셸 메타문자를 이스케이프 처리되지 않은 상태로 수신합니다. 따라서 .cmd 스크립트에 args&calc.exe 와 같은 인수를 전달하면, 결과적으로 calc.exe 가 두 번째 명령으로 실행됩니다. Windows에서는 모든 인수가 내부적으로 단일 명령줄 문자열로 결합되므로, process.start("file.cmd", {"args", "&calc.exe"}) 처럼 인수를 따로 전달하더라도 문제가 해결되지 않는다는 점에 유의하십시오. 많은 도구들이 배치 스크립트(예: npm, yarn 또는 gradle 래퍼)를 설치하므로, 대상이 배치 파일이라는 사실을 간과하기 쉽습니다.

유닉스에서는 셸을 명시적으로 실행할 때(예: process.start("/bin/sh", {"-c", "args&&malicious_binary"}) ) 유사한 문제가 발생할 수 있습니다. 이 경우 QProcess가 아닌 셸이 -c 문자열을 파싱하여, Windows에서 cmd.exe 가 수행하는 것과 마찬가지로 &&, ;, |, 백틱(`), $() 에 평소와 같은 의미를 부여합니다. 여기서 마지막에 붙은 &&malicious_binary 는 args 다음에 두 번째 프로그램을 실행하므로, 신뢰할 수 없는 입력으로 -c 문자열을 구성하는 것은 명령어 주입에 해당합니다.

QBuffer, QFile, QTcpSocket도 참조하십시오 .

멤버 유형 문서

QProcess::CreateProcessArgumentModifier

참고: 이 typedef는 데스크톱 Windows에서만 사용할 수 있습니다.

Windows에서 ` QProcess `는 `Win32 API` 함수 ` CreateProcess `를 사용하여 자식 프로세스를 시작합니다. ` QProcess `는 플랫폼 세부 사항을 신경 쓰지 않고도 편리하게 프로세스를 시작할 수 있는 방법을 제공하지만, 경우에 따라 ` CreateProcess`에 전달되는 매개변수를 미세하게 조정해야 할 필요가 있습니다. 이를 위해서는 ` CreateProcessArgumentModifier ` 함수를 정의하고 이를 ` setCreateProcessArgumentsModifier`에 전달하면 됩니다.

CreateProcessArgumentModifier 함수는 하나의 매개변수, 즉 CreateProcessArguments 구조체에 대한 포인터를 받습니다. 이 구조체의 멤버들은 CreateProcessArgumentModifier 함수가 호출된 후 CreateProcess 함수로 전달됩니다.

다음 예제는 CreateProcess 에 사용자 정의 플래그를 전달하는 방법을 보여줍니다. 콘솔 프로세스 A에서 콘솔 프로세스 B를 시작할 때, QProcess 는 기본적으로 프로세스 A의 콘솔 창을 프로세스 B에 재사용합니다. 이 예제에서는 대신 자식 프로세스 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 및 setCreateProcessArgumentsModifier()도 참조하십시오 .

enum QProcess::ExitStatus

이 열거형은 QProcess 의 다양한 종료 상태를 설명합니다.

상수값설명
QProcess::NormalExit0프로세스가 정상적으로 종료되었습니다.
QProcess::CrashExit1프로세스가 중단되었습니다.

exitStatus()도 참조하십시오 .

enum QProcess::InputChannelMode

이 열거형은 ` QProcess`의 프로세스 입력 채널 모드를 설명합니다. ` setInputChannelMode()`에 이 값들 중 하나를 전달하여 현재 쓰기 채널 모드를 설정할 수 있습니다.

상수값설명
QProcess::ManagedInputChannel0QProcess 실행 중인 프로세스의 입력을 관리합니다. 이는 ` QProcess`의 기본 입력 채널 모드입니다.
QProcess::ForwardedInputChannel1QProcess 메인 프로세스의 입력을 실행 중인 프로세스로 전달합니다. 자식 프로세스는 메인 프로세스와 동일한 소스에서 표준 입력을 읽습니다. 자식 프로세스가 실행 중인 동안 메인 프로세스는 표준 입력을 읽으려 해서는 안 됩니다.

setInputChannelMode()도 참조하십시오 .

enum QProcess::ProcessChannel

이 열거형은 실행 중인 프로세스가 사용하는 프로세스 채널을 설명합니다. setReadChannel()에 이 값들 중 하나를 전달하여 QProcess 의 현재 읽기 채널을 설정할 수 있습니다.

상수값설명
QProcess::StandardOutput0실행 중인 프로세스의 표준 출력(stdout).
QProcess::StandardError1실행 중인 프로세스의 표준 오류(stderr).

setReadChannel()도 참조하십시오 .

enum QProcess::ProcessChannelMode

이 열거형은 ` QProcess`의 프로세스 출력 채널 모드를 설명합니다. ` setProcessChannelMode()`에 이 값들 중 하나를 전달하여 현재 읽기 채널 모드를 설정할 수 있습니다.

상수값설명
QProcess::SeparateChannels0QProcess 실행 중인 프로세스의 출력을 관리하며, 표준 출력 및 표준 오류 데이터를 별도의 내부 버퍼에 보관합니다. setReadChannel()를 호출하여 QProcess 의 현재 읽기 채널을 선택할 수 있습니다. 이는 QProcess 의 기본 채널 모드입니다.
QProcess::MergedChannels1QProcess 실행 중인 프로세스의 출력을 표준 출력 채널(stdout)로 병합합니다. 표준 오류 채널(stderr)은 어떠한 데이터도 수신하지 않습니다. 실행 중인 프로세스의 표준 출력 및 표준 오류 데이터는 교차 배열됩니다. 분리된 프로세스의 경우, 실행 중인 프로세스의 병합된 출력이 메인 프로세스로 전달됩니다.
QProcess::ForwardedChannels2QProcess 실행 중인 프로세스의 출력을 메인 프로세스로 전달합니다. 자식 프로세스가 표준 출력 및 표준 오류로 기록하는 모든 내용은 메인 프로세스의 표준 출력 및 표준 오류로 기록됩니다.
QProcess::ForwardedErrorChannel4QProcess 실행 중인 프로세스의 표준 출력을 관리하지만, 표준 오류는 메인 프로세스로 전달합니다. 이는 표준 출력을 다른 프로세스나 파일로 리디렉션하는 반면, 표준 오류는 진단 목적으로 콘솔에 출력되는, 명령줄 도구를 필터로 사용하는 일반적인 사용 사례를 반영합니다. (이 값은 Qt 5.2에서 도입되었습니다.)
QProcess::ForwardedOutputChannel3ForwardedErrorChannel과 상호 보완적인 역할을 합니다. (이 값은 Qt 5.2에서 도입되었습니다.)

참고: Windows는 GUI 전용 애플리케이션의 출력이 상속된 콘솔로 전송되는 것을 의도적으로 차단합니다. 이는 파일이나 파이프로 리디렉션된 출력에는 적용되지 않습니다. 그럼에도 불구하고 GUI 전용 애플리케이션의 출력을 콘솔로 전달하려면 SeparateChannels를 사용하여 출력을 직접 읽어와 적절한 출력 채널에 기록함으로써 전달해야 합니다.

setProcessChannelMode()도 참조하십시오 .

enum QProcess::ProcessError

이 열거형은 QProcess 에서 보고되는 다양한 오류 유형을 설명합니다.

상수상수값설명
QProcess::FailedToStart0프로세스 시작에 실패했습니다. 호출된 프로그램이 없거나, 프로그램을 호출할 수 있는 권한이나 리소스가 부족할 수 있습니다.
QProcess::Crashed1프로세스가 성공적으로 시작된 후 얼마 지나지 않아 중단되었습니다.
QProcess::Timedout2마지막 waitFor...() 함수의 타임아웃이 발생했습니다. QProcess 의 상태는 변경되지 않았으므로 waitFor...()를 다시 호출해 볼 수 있습니다.
QProcess::WriteError4프로세스에 쓰기를 시도하는 동안 오류가 발생했습니다. 예를 들어, 프로세스가 실행 중이 아니거나 입력 채널이 닫혀 있을 수 있습니다.
QProcess::ReadError3프로세스에서 읽으려고 할 때 오류가 발생했습니다. 예를 들어, 프로세스가 실행 중이 아닐 수 있습니다.
QProcess::UnknownError5알 수 없는 오류가 발생했습니다. 이는 error()의 기본 반환값입니다.

error()도 참조하십시오 .

enum QProcess::ProcessState

이 열거형은 QProcess 의 다양한 상태를 나타냅니다.

상수값상수설명
QProcess::NotRunning0프로세스가 실행 중이 아닙니다.
QProcess::Starting1프로세스가 시작되고 있지만, 프로그램은 아직 호출되지 않았습니다.
QProcess::Running2프로세스가 실행 중이며 읽기 및 쓰기 준비가 되어 있습니다.

state()도 참조하십시오 .

[since 6.6] enum class QProcess::UnixProcessFlag
flags QProcess::UnixProcessFlags

이 플래그들은 UnixProcessParameters 의 ‘ flags ’ 필드에서 사용할 수 있습니다.

상수값설명
QProcess::UnixProcessFlag::CloseFileDescriptors0x0010lowestFileDescriptorToClose 로 정의된 임계값 이상의 모든 파일 디스크립터를 닫아, 부모 프로세스에서 현재 열려 있는 디스크립터가 자식 프로세스로 실수로 유출되는 것을 방지합니다. stdin, stdout 및 stderr 파일 디스크립터는 절대 닫히지 않습니다.
QProcess::UnixProcessFlag::CreateNewSession (since Qt 6.7)0x0040setsid(2) 를 호출하여 새로운 프로세스 세션을 시작합니다. 이를 통해 자식 프로세스는 현재 프로세스가 속한 세션보다 더 오래 생존할 수 있습니다. 이는 startDetached()가 프로세스를 분리하기 위해 수행하는 단계 중 하나이며, 프로세스를 데몬화하는 단계 중 하나이기도 합니다.
QProcess::UnixProcessFlag::DisconnectControllingTerminal (since Qt 6.7)0x0080프로세스에 제어 터미널이 있는 경우, 해당 터미널과의 연결을 끊도록 요청합니다. 제어 터미널이 없으면 아무 일도 일어나지 않습니다. 제어 터미널에 여전히 연결된 프로세스는 터미널이 닫힐 경우 ‘Hang Up’(SIGHUP) 신호나 다른 터미널 제어 신호(SIGTSTP, SIGTTIN, SIGTTOU) 중 하나를 수신할 수 있습니다. 일부 운영 체제에서는 프로세스가 세션 리더인 경우에만 제어 터미널과의 연결을 끊을 수 있으므로, CreateNewSession 플래그가 필요할 수 있습니다. 이와 마찬가지로, 이는 프로세스를 데몬화하는 단계 중 하나입니다.
QProcess::UnixProcessFlag::IgnoreSigPipe0x0002ResetSignalHandlers 플래그가 설정된 경우에도 항상 SIGPIPE 신호를 무시하도록 설정합니다(SIG_IGN). 기본적으로, 자식 프로세스가 QProcess::closeReadChannel()를 통해 해당 채널이 닫힌 후 표준 출력이나 표준 오류에 쓰기를 시도하면 SIGPIPE 신호를 받아 즉시 종료됩니다. 이 플래그를 사용하면 신호 없이 쓰기 작업이 실패하고 자식 프로세스는 실행을 계속할 수 있습니다.
QProcess::UnixProcessFlag::ResetIds (since Qt 6.7)0x0100현재 프로세스가 여전히 보유하고 있을 수 있는 유지된 유효 사용자 ID 또는 그룹 ID를 모두 해제합니다( setuid(2) 및 setgid(2), 그리고 QCoreApplication::setSetuidAllowed() 참조). 이는 현재 프로세스가 setuid 또는 setgid 상태였으며 자식 프로세스가 상승된 권한을 유지하지 않기를 원하는 경우에 유용합니다.
QProcess::UnixProcessFlag::ResetSignalHandlers0x0001모든 유닉스 신호 핸들러를 기본 상태로 재설정합니다(즉, ` SIG_DFL `를 ` signal(2)`로 전달합니다). 이 플래그는 무시된(`SIG_IGN`) 신호가 자식 프로세스의 동작에 영향을 미치지 않도록 보장하는 데 유용합니다.
QProcess::UnixProcessFlag::UseVFork0x0020QProcess 이 vfork(2) 를 사용하여 자식 프로세스를 시작하도록 요청합니다. 이 플래그는 setChildProcessModifier()로 설정된 콜백 함수가 vfork(2) 의 자식 측에서 안전하게 실행될 수 있음을 나타내는 데 사용합니다. 즉, 해당 콜백 함수는 (직접적으로 또는 호출하는 함수를 통해) 비국소 변수를 수정하지 않으며, 부모 프로세스와 통신하려고 시도하지도 않습니다. QProcess 가 실제로 vfork(2) 를 사용할지 여부와 vfork(2) 가 표준 fork(2) 와 다른지는 구현에 따라 다릅니다.
QProcess::UnixProcessFlag::DisableCoreDumps (since Qt 6.9)0x0200QProcess 가 자식 프로세스에서 코어 덤프를 비활성화하도록 요청합니다. 이는 실행 중인 실행 파일이 충돌할 가능성이 높지만, 사용자와 관리자가 해당 상황에 대한 버그 보고서를 생성하는 데 관심이 없을 경우(예: 실행 파일이 테스트 프로세스인 경우) 유용합니다. 이 설정은 크래시된 프로세스의 exitStatus()에는 영향을 미치지 않습니다. 이는 코어 덤프 크기 리소스의 소프트 제한을 0으로 설정하여 구현되며, 즉 애플리케이션은 이 값을 하드 제한까지 올림으로써 이 변경 사항을 되돌릴 수 있습니다.

이 열거형은 Qt 6.6에서 도입되었습니다.

UnixProcessFlags 유형은 QFlags<UnixProcessFlag>에 대한 typedef입니다. 이 유형은 UnixProcessFlag 값들의 OR 조합을 저장합니다.

setUnixProcessParameters() 및 unixProcessParameters()도 참조하십시오 .

멤버 함수 문서

[explicit] QProcess::QProcess(QObject *parent = nullptr)

지정된 ` parent`을 사용하여 `QProcess` 객체를 생성합니다.

[virtual noexcept] QProcess::~QProcess()

QProcess 객체를 해제합니다. 즉, 프로세스를 종료합니다.

이 함수는 프로세스가 종료될 때까지 반환되지 않는다는 점에 유의하십시오.

QStringList QProcess::arguments() const

프로세스가 마지막으로 시작될 때 전달된 명령줄 인수를 반환합니다.

setArguments() 및 start()도 참조하십시오 .

[override virtual] qint64 QProcess::bytesToWrite() const

QIODevice::bytesToWrite() const를 재구현합니다.

[since 6.0] std::function<void ()> QProcess::childProcessModifier() const

setChildProcessModifier() 호출을 통해 이전에 설정된 수정자 함수를 반환합니다.

참고: 이 함수는 Unix 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.0에서 도입되었습니다.

setChildProcessModifier() 및 unixProcessParameters()도 참조하십시오 .

[override virtual] void QProcess::close()

QIODevice::close()를 재구현합니다.

프로세스와의 모든 통신을 종료하고 프로세스를 강제 종료합니다. 이 함수를 호출한 후에는 QProcess 가 더 이상 readyRead()를 발생시키지 않으며, 데이터를 읽거나 쓸 수 없게 됩니다.

void QProcess::closeReadChannel(QProcess::ProcessChannel channel)

channel 읽기 채널을 닫습니다. 이 함수를 호출한 후에는 QProcess 이 해당 채널에서 더 이상 데이터를 수신하지 않습니다. 이미 수신된 데이터는 계속해서 읽을 수 있습니다.

프로세스의 출력 결과에 관심이 없다면 메모리를 절약하기 위해 이 함수를 호출하십시오.

closeWriteChannel() 및 setReadChannel()도 참조하십시오 .

void QProcess::closeWriteChannel()

QProcess 의 쓰기 채널이 닫히도록 예약합니다. 모든 데이터가 프로세스에 쓰여지면 채널이 닫힙니다. 이 함수를 호출한 후에는 프로세스에 데이터를 쓰려는 모든 시도가 실패합니다.

채널이 닫힐 때까지 입력 데이터를 읽는 프로그램의 경우, 쓰기 채널을 닫아야 합니다. 예를 들어, "more" 프로그램은 유닉스와 윈도우 모두에서 콘솔에 텍스트 데이터를 표시하는 데 사용됩니다. 하지만 QProcess 의 쓰기 채널이 닫히기 전까지는 텍스트 데이터를 표시하지 않습니다. 예:

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

start()가 호출되면 쓰기 채널이 암시적으로 열립니다.

closeReadChannel()도 참조하십시오 .

QProcess::CreateProcessArgumentModifier QProcess::createProcessArgumentsModifier() const

이전에 설정된 ‘ CreateProcess ’ 수정자 함수를 반환합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있습니다.

setCreateProcessArgumentsModifier() 및 QProcess::CreateProcessArgumentModifier도 참조하십시오 .

QProcess::ProcessError QProcess::error() const

마지막으로 발생한 오류의 유형을 반환합니다.

state()도 참조하십시오 .

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

이 신호는 프로세스에서 오류가 발생했을 때 전송됩니다. 지정된 오류 코드( error )는 발생한 오류의 유형을 나타냅니다.

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

program 프로그램을 arguments 인수를 지정하여 새 프로세스에서 시작하고, 프로그램이 완료될 때까지 기다린 후 해당 프로세스의 종료 코드를 반환합니다. 새 프로세스가 콘솔에 출력하는 모든 데이터는 호출 프로세스로 전달됩니다.

환경 및 작업 디렉터리는 호출 프로세스에서 상속받습니다.

인자 처리는 해당 start() 오버로드와 동일합니다.

프로세스를 시작할 수 없는 경우 -2가 반환됩니다. 프로세스가 중단되면 -1이 반환됩니다. 그 외의 경우에는 프로세스의 종료 코드가 반환됩니다.

start()도 참조하십시오 .

int QProcess::exitCode() const

마지막으로 종료된 프로세스의 종료 코드를 반환합니다.

exitStatus()이 NormalExit 를 반환하지 않는 한 이 값은 유효하지 않습니다.

QProcess::ExitStatus QProcess::exitStatus() const

마지막으로 완료된 프로세스의 종료 상태를 반환합니다.

Windows에서, 다른 응용 프로그램의 TerminateProcess()를 통해 프로세스가 종료된 경우에도, 종료 코드가 0보다 작지 않은 한 이 함수는 여전히 NormalExit 를 반환합니다.

[noexcept, since 6.7] void QProcess::failChildProcessModifier(const char *description, int error = 0)

이 함수들은 수정자 세트 내에서 ` setChildProcessModifier()`와 함께 사용되어 오류 상태가 발생했음을 나타낼 수 있습니다. 수정자가 이 함수들을 호출하면, ` QProcess `는 부모 프로세스에서 코드 ` QProcess::FailedToStart `와 함께 ` errorOccurred()`를 발생시킵니다. description 는 문제 진단에 도움이 되는 정보를 errorString()에 포함하는 데 사용할 수 있으며, 일반적으로 C 라이브러리 함수 perror() 와 유사하게 실패한 호출의 이름을 포함합니다. 또한, error 매개변수는 <errno.h> 오류 코드일 수 있으며, 이 경우 해당 오류 코드의 텍스트 형식도 함께 포함됩니다.

예를 들어, 자식 수정자는 다음과 같은 방식으로 자식 프로세스를 위한 추가 파일 디스크립터를 준비할 수 있습니다:

process.setChildProcessModifier([fd, &process]() {
    if (dup2(fd, TargetFileDescriptor) < 0)
        process.failChildProcessModifier(errno, "aux comm channel");
});
process.start();

여기서 ` fd `는 부모 프로세스에서 현재 열려 있는 파일 디스크립터입니다. ` dup2() ` 시스템 호출이 ` EBADF ` 상태를 반환한 경우, ` errorString()` 프로세스의 오류 메시지는 "자식 프로세스 수정자가 오류를 보고했습니다: 보조 통신 채널: 잘못된 파일 디스크립터"가 될 수 있습니다.

이 함수는 호출자에게 반환하지 않습니다. 자식 수정자 외부에서 또는 올바른 QProcess 객체를 사용하지 않고 이 함수를 호출하는 것은 정의되지 않은 동작입니다.

참고: 구현상 description 매개변수의 길이는 약 500자로 제한됩니다. 여기에는 error 코드의 텍스트는 포함되지 않습니다.

이 함수는 Qt 6.7에서 도입되었습니다.

setChildProcessModifier() 및 setUnixProcessParameters()도 참조하십시오 .

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

이 신호는 프로세스가 종료될 때 발생합니다. ` exitCode `는 프로세스의 종료 코드이며(정상 종료 시에만 유효함), ` exitStatus `는 종료 상태입니다. 프로세스가 종료된 후에도 ` QProcess `에 있는 버퍼는 그대로 유지됩니다. 따라서 프로세스가 종료되기 전에 기록한 데이터는 여전히 읽을 수 있습니다.

exitStatus()도 참조하십시오 .

QProcess::InputChannelMode QProcess::inputChannelMode() const

QProcess 의 표준 입력 채널의 채널 모드를 반환합니다.

setInputChannelMode() 및 InputChannelMode도 참조하십시오 .

[override virtual] bool QProcess::isSequential() const

QIODevice::isSequential() const를 재구현합니다.

[slot] void QProcess::kill()

현재 프로세스를 종료하여 즉시 종료되도록 합니다.

Windows에서는 kill()이 TerminateProcess를 사용하며, Unix 및 macOS에서는 프로세스에 SIGKILL 신호가 전송됩니다.

terminate()도 참조하십시오 .

QString QProcess::nativeArguments() const

프로그램에 대한 추가 네이티브 명령줄 인수를 반환합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있습니다.

setNativeArguments()도 참조하십시오 .

[static] QString QProcess::nullDevice()

운영 체제의 null 장치입니다.

반환되는 파일 경로는 네이티브 디렉터리 구분 기호를 사용합니다.

QProcess::setStandardInputFile(), QProcess::setStandardOutputFile() 및 QProcess::setStandardErrorFile()도 참조하십시오 .

[override virtual] bool QProcess::open(QIODeviceBase::OpenMode mode = ReadWrite)

QIODevice::open(QIODeviceBase::OpenMode mode)를 재구현합니다.

setProgram()로 설정된 프로그램을 setArguments()로 설정된 인수를 사용하여 시작합니다. OpenMode는 mode 로 설정됩니다.

이 메서드는 start()의 별칭이며, QIODevice 에서 정의된 인터페이스를 완전히 구현하기 위해서만 존재합니다.

프로그램이 시작된 경우 true 를 반환합니다.

start(), setProgram() 및 setArguments()도 참조하십시오 .

QProcess::ProcessChannelMode QProcess::processChannelMode() const

QProcess 의 표준 출력 및 표준 오류 채널의 채널 모드를 반환합니다.

setProcessChannelMode(), ProcessChannelMode 및 setReadChannel()도 참조하십시오 .

QProcessEnvironment QProcess::processEnvironment() const

QProcess 가 자식 프로세스에 전달할 환경을 반환합니다. setProcessEnvironment()를 사용하여 환경이 설정되지 않은 경우, 이 메서드는 부모로부터 환경을 상속받을 것임을 나타내는 객체를 반환합니다.

setProcessEnvironment(), QProcessEnvironment::inheritsFromParent() 및 Environment variables도 참조하십시오 .

qint64 QProcess::processId() const

사용 가능한 경우, 실행 중인 프로세스의 네이티브 프로세스 식별자를 반환합니다. 현재 실행 중인 프로세스가 없는 경우, ` 0 `가 반환됩니다.

QString QProcess::program() const

프로세스가 마지막으로 시작된 프로그램을 반환합니다.

setProgram() 및 start()도 참조하십시오 .

QByteArray QProcess::readAllStandardError()

현재 읽기 채널과 관계없이, 이 함수는 프로세스의 표준 오류에서 사용할 수 있는 모든 데이터를 ` QByteArray` 형식으로 반환합니다.

readyReadStandardError(), readAllStandardOutput(), readChannel(), setReadChannel()도 참조하십시오 .

QByteArray QProcess::readAllStandardOutput()

현재 읽기 채널과 관계없이, 이 함수는 프로세스의 표준 출력에서 사용할 수 있는 모든 데이터를 ` QByteArray`로 반환합니다.

readyReadStandardOutput(), readAllStandardError(), readChannel(), setReadChannel()도 참조하십시오 .

QProcess::ProcessChannel QProcess::readChannel() const

QProcess 의 현재 읽기 채널을 반환합니다.

setReadChannel()도 참조하십시오 .

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

QIODevice::readData(char *data, qint64 maxSize)를 재구현합니다.

[private signal] void QProcess::readyReadStandardError()

이 신호는 프로세스가 표준 오류 채널(stderr)을 통해 새로운 데이터를 제공했을 때 발생합니다. 이 신호는 현재 read channel 의 설정과 관계없이 발생합니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.

readAllStandardError() 및 readChannel()도 참조하십시오 .

[private signal] void QProcess::readyReadStandardOutput()

이 신호는 프로세스가 표준 출력 채널(stdout)을 통해 새로운 데이터를 제공할 때 발신됩니다. 이 신호는 현재 read channel 의 설정과 관계없이 발신됩니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.

readAllStandardOutput() 및 readChannel()도 참조하십시오 .

void QProcess::setArguments(const QStringList &arguments)

프로세스를 시작할 때 호출되는 프로그램으로 전달할 ‘ arguments ’을 설정합니다. 이 함수는 start()를 호출하기 전에 반드시 호출되어야 합니다.

start(), setProgram() 및 arguments()도 참조하십시오 .

[since 6.0] void QProcess::setChildProcessModifier(const std::function<void ()> &modifier)

유닉스 시스템(macOS 포함; Windows의 경우 setCreateProcessArgumentsModifier() 참조)에서 자식 프로세스에 대한 ` modifier ` 함수를 설정합니다. ` modifier ` 인자에 포함된 함수는 ` fork() ` 또는 ` vfork() `이 완료되고, ` QProcess `이 자식 프로세스에 대한 표준 파일 디스크립터를 설정한 후, ` execve()`이 호출되기 전, ` start()` 내부에서 자식 프로세스에서 호출됩니다.

다음은 권한 없이 실행되도록 자식 프로세스를 설정하는 예시입니다:

void runSandboxed(const QString &name, const QStringList &arguments)
{
    QProcess proc;
    proc.setChildProcessModifier([] {
        // Drop all privileges in the child process, and enter
        // a chroot jail.
        ::setgroups(0, nullptr);
        ::chroot("/run/safedir");
        ::chdir("/");
        ::setgid(safeGid);
        ::setuid(safeUid);
        ::umask(077);
    });
    proc.start(name, arguments);
    proc.waitForFinished();
}

수정자 함수에서 오류 상황이 발생하면, failChildProcessModifier()를 사용하여 해당 상황을 QProcess 호출자에게 보고할 수 있습니다. 또는 _exit() 나 abort() 와 같은 다른 프로세스 중지 방법을 사용할 수도 있습니다.

모든 불필요한 파일 디스크립터를 닫거나 제어 TTY와의 연결을 끊는 것과 같은 자식 프로세스의 특정 속성은, 오류를 감지하고 FailedToStart 상태를 보고할 수 있는 setUnixProcessParameters()를 사용하는 것이 더 용이할 수 있습니다. 이 수정자는 추가 파일 설명자를 설정하는 등 자식 프로세스의 특정 비표준 속성을 변경하는 데 유용합니다. 자식 프로세스 수정자와 유닉스 프로세스 매개변수가 모두 설정된 경우, 해당 매개변수가 적용되기 전에 수정자가 실행됩니다.

참고: 멀티스레드애플리케이션에서 이 함수는 다른 스레드에서 사용 중일 수 있는 뮤텍스를 잠글 수 있는 함수를 호출하지 않도록 주의해야 합니다(일반적으로 POSIX에서 "async-signal-safe"로 정의된 함수만 사용하는 것이 권장됩니다). qDebug()을 포함하여 대부분의 Qt API는 이 콜백 내부에서 안전하지 않으며, 교착 상태를 유발할 수 있습니다.

참고: setUnixProcessParameters()을 통해 UnixProcessParameters::UseVFork 플래그가 설정된경우 , QProcess 는 vfork() 시맨틱을 사용하여 자식 프로세스를 시작할 수 있으므로, 이 함수는 더욱 엄격한 제약 조건을 준수해야 합니다. 첫째, 이 프로세스는 여전히 부모 프로세스와 메모리를 공유하고 있으므로, 데이터 경합을 피하기 위해 비로컬 변수에 쓰기를 해서는 안 되며, 해당 변수에서 읽을 때는 적절한 순서 세미오틱을 준수해야 합니다. 둘째, 더 많은 라이브러리 함수가 오작동할 가능성이 있으므로, 이 함수는 read(), write(), setsid(), nice() 등과 같은 저수준 시스템 호출만 사용해야 합니다.

이 함수는 Qt 6.0에서 도입되었습니다.

childProcessModifier(), failChildProcessModifier(), setUnixProcessParameters()도 참조하십시오 .

void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)

CreateProcess Win32 API 호출에 대한 ` modifier `을 설정합니다. 이전에 설정된 값을 제거하려면 ` QProcess::CreateProcessArgumentModifier() `을 전달하십시오.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있으며 C++11이 필요합니다.

createProcessArgumentsModifier(), QProcess::CreateProcessArgumentModifier, setChildProcessModifier()도 참조하십시오 .

void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)

QProcess 의 표준 입력 채널의 채널 모드를 지정된 mode 로 설정합니다. 이 모드는 다음에 start()가 호출될 때 사용됩니다.

inputChannelMode() 및 InputChannelMode도 참조하십시오 .

void QProcess::setNativeArguments(const QString &arguments)

프로그램에 대한 추가 네이티브 명령줄 arguments 를 설정합니다.

명령줄 인자 arguments 를 자식 프로세스에 전달하는 시스템 API가 기본적으로 단일 문자열을 사용하는 운영 체제에서는, ` QProcess`의 이식성 있는 목록 기반 API를 통해 전달할 수 없는 명령줄이 존재할 수 있습니다. 이러한 경우, 이 함수를 사용하여 일반적인 인자 목록으로 구성된 문자열 뒤에 공백을 구분자로 삼아 추가될 문자열을 설정해야 합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있습니다.

nativeArguments()도 참조하십시오 .

void QProcess::setProcessChannelMode(QProcess::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();

processChannelMode(), ProcessChannelMode 및 setReadChannel()도 참조하십시오 .

void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)

QProcess 가 자식 프로세스에 전달할 환경 변수( environment )를 설정합니다.

예를 들어, 다음 코드는 TMPDIR 환경 변수를 추가합니다:

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

Windows에서는 환경 변수 이름에 대소문자를 구분하지 않는다는 점에 유의하십시오.

processEnvironment(), QProcessEnvironment::systemEnvironment() 및 Environment variables도 참조하십시오 .

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

QProcess 의 현재 상태를 지정된 state 로 설정합니다.

state()도 참조하십시오 .

void QProcess::setProgram(const QString &program)

프로세스 시작 시 사용할 ` program `을 설정합니다. 이 함수는 ` start()`를 호출하기 전에 반드시 호출되어야 합니다.

program 가 절대 경로인 경우, 실행될 정확한 실행 파일을 지정합니다. 상대 경로는 플랫폼별 방식으로 해결되며, 여기에는 PATH 환경 변수 검색이 포함됩니다(자세한 내용은 Finding the Executable 참조).

start(), setArguments(), program() 및 QStandardPaths::findExecutable()도 참조하십시오 .

void QProcess::setReadChannel(QProcess::ProcessChannel channel)

QProcess 의 현재 읽기 채널을 지정된 channel 로 설정합니다. 현재 입력 채널은 read(), readAll(), readLine(), getChar() 함수에서 사용됩니다. 또한 이 채널은 QProcess 가 readyRead()를 발생시키는 트리거 역할을 합니다.

readChannel()도 참조하십시오 .

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

프로세스의 표준 오류 출력을 fileName 파일에 리디렉션합니다. 리디렉션이 설정되면 표준 오류 읽기 채널이 닫힙니다. 따라서 read()을 사용하여 이 채널에서 읽으려고 하면 항상 실패하며, readAllStandardError()을 사용할 때도 마찬가지입니다. mode 가 Append인 경우 파일에 내용이 추가되며, 그렇지 않은 경우 파일이 잘립니다.

파일 열기 방식에 대한 자세한 내용은 setStandardOutputFile()을 참조하십시오.

참고: setProcessChannelMode()가 QProcess::MergedChannels 를 인수로 받아 호출된 경우, 이 함수는 아무런 효과도 없습니다.

setStandardInputFile(), setStandardOutputFile() 및 setStandardOutputProcess()도 참조하십시오 .

void QProcess::setStandardInputFile(const QString &fileName)

프로세스의 표준 입력을 fileName 로 지정한 파일로 리디렉션합니다. 입력 리디렉션이 설정되어 있으면, QProcess 객체는 읽기 전용 모드로 전환됩니다( write()를 호출하면 오류가 발생합니다).

프로세스가 즉시 EOF를 읽도록 하려면 여기에 nullDevice()을 전달하십시오. 이는 데이터를 쓰기 전에 closeWriteChannel()을 사용하는 것보다 더 깔끔한 방법입니다. 프로세스를 시작하기 전에 미리 설정할 수 있기 때문입니다.

start()이 호출될 당시 fileName 파일이 존재하지 않거나 읽을 수 없는 상태라면, 프로세스 시작이 실패합니다.

프로세스가 시작된 후에 setStandardInputFile()을 호출해도 아무런 효과가 없습니다.

setStandardOutputFile(), setStandardErrorFile() 및 setStandardOutputProcess()도 참조하십시오 .

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

프로세스의 표준 출력을 fileName 파일로 리디렉션합니다. 리디렉션이 설정되면 표준 출력 읽기 채널이 닫힙니다. 따라서 read()을 사용하여 이 채널에서 읽으려고 하면 항상 실패하며, readAllStandardOutput()도 마찬가지입니다.

프로세스의 모든 표준 출력을 버리려면 여기에 nullDevice()을 전달하십시오. 이는 QProcess 버퍼가 채워지지 않기 때문에 단순히 표준 출력을 읽지 않는 것보다 더 효율적입니다.

start()가 호출되는 시점에 fileName 파일이 존재하지 않으면, 해당 파일이 생성됩니다. 파일을 생성할 수 없는 경우, 시작 작업이 실패합니다.

파일이 존재하고 mode 가 QIODeviceBase::Truncate 인 경우, 파일 내용이 잘려 나갑니다. 그렇지 않은 경우( mode 가 QIODeviceBase::Append 인 경우), 파일에 내용이 추가됩니다.

프로세스가 시작된 후 setStandardOutputFile()을 호출해도 아무런 효과가 없습니다.

fileName 가 빈 문자열인 경우, 표준 출력의 리디렉션을 중지합니다. 이는 리디렉션 후 표준 출력을 복원하는 데 유용합니다.

setStandardInputFile(), setStandardErrorFile(), setStandardOutputProcess()도 참조하십시오 .

void QProcess::setStandardOutputProcess(QProcess *destination)

이 프로세스의 표준 출력 스트림을 destination 프로세스의 표준 입력으로 전달합니다.

다음 셸 명령어:

command1 | command2

QProcess 을 사용하여 다음 코드로 구현할 수 있습니다:

QProcess process1;
QProcess process2;

process1.setStandardOutputProcess(&process2);

process1.start("command1");
process2.start("command2");

[since 6.6] void QProcess::setUnixProcessParameters(const QProcess::UnixProcessParameters &params)

유닉스 시스템에서 자식 프로세스에 대한 추가 설정 및 매개변수를 ` params`로 설정합니다. 이 함수는 ` QProcess `에 대상 실행 파일을 실행하기 전에 자식 프로세스를 수정하도록 요청하는 데 사용할 수 있습니다.

이 함수는 불필요한 파일 설명자를 모두 닫거나, 자식 프로세스의 nice 레벨을 변경하거나, 제어용 TTY와의 연결을 끊는 등 자식 프로세스의 특정 속성을 변경하는 데 사용할 수 있습니다. 자식 프로세스를 더 세밀하게 제어하거나 다른 방식으로 수정하려면 setChildProcessModifier() 함수를 사용하십시오. 자식 프로세스 수정자와 유닉스 프로세스 매개변수가 모두 설정된 경우, 해당 매개변수가 적용되기 전에 수정자가 실행됩니다.

참고: 이 함수는 유닉스 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.6에서 도입되었습니다.

unixProcessParameters() 및 setChildProcessModifier()도 참조하십시오 .

[since 6.6] void QProcess::setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)

유닉스 시스템에서 자식 프로세스에 대한 추가 설정을 ` flagsOnly`로 설정합니다. 이는 ` flags ` 필드만 설정된 오버로드와 동일합니다.

참고: 이 함수는 유닉스 플랫폼에서만 사용할 수 있습니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.6에서 도입되었습니다.

unixProcessParameters() 및 setChildProcessModifier()도 참조하십시오 .

void QProcess::setWorkingDirectory(const QString &dir)

작업 디렉터리를 dir 로 설정합니다. ` QProcess `는 이 디렉터리에서 프로세스를 시작합니다. 기본 동작은 호출하는 프로세스의 작업 디렉터리에서 프로세스를 시작하는 것입니다.

workingDirectory() 및 start()도 참조하십시오 .

[static] QStringList QProcess::splitCommand(QStringView command)

command 문자열을 토큰 목록으로 분할하고, 그 목록을 반환합니다.

공백이 포함된 토큰은 큰따옴표로 묶을 수 있으며, 연속된 세 개의 큰따옴표는 따옴표 문자를 나타냅니다.

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

지정된 ` program `을 새 프로세스에서 시작하며, ` arguments`에 포함된 명령줄 인수를 전달합니다. ` QProcess `가 실행할 실행 파일을 검색하는 방법에 대한 자세한 내용은 ` setProgram()`을 참조하십시오. `OpenMode`는 ` mode`로 설정됩니다. 인수는 더 이상 분할되지 않습니다.

QProcess 객체는 즉시 Starting 상태로 진입합니다. 프로세스가 성공적으로 시작되면 QProcess 는 started() 신호를 발생시키고, 그렇지 않은 경우 errorOccurred() 신호를 발생시킵니다. 자식 프로세스를 동기식으로 시작할 수 있는 플랫폼(특히 Windows)에서는 이 함수가 반환되기 전에 해당 신호들이 발생하며, 이 QProcess 객체는 각각 QProcess::Running 또는 QProcess::NotRunning 상태로 전환된다는 점에 유의하십시오. 다른 플랫폼에서는 started() 및 errorOccurred() 신호의 발신이 지연됩니다.

waitForStarted()를 호출하여 프로세스가 시작되었는지(또는 시작에 실패했는지) 확인하고, 해당 신호가 발송되었는지 확인하십시오. 프로세스 시작 상태가 이미 알려져 있더라도 이 함수를 호출하는 것은 안전하지만, 신호는 다시 발송되지 않습니다.

Windows: 인수는 따옴표로 묶여 CommandLineToArgvW() Windows 함수와 호환되는 명령줄로 결합됩니다. 명령줄 따옴표 처리 요구 사항이 다른 프로그램의 경우, setNativeArguments()를 사용해야 합니다. CommandLineToArgvW() 규칙을 따르지 않는 대표적인 프로그램으로는 cmd.exe가 있으며, 결과적으로 모든 배치 스크립트도 이에 해당합니다.

QProcess 객체가 이미 프로세스를 실행 중인 경우, 콘솔에 경고 메시지가 표시될 수 있으며, 기존 프로세스는 영향을 받지 않고 계속 실행됩니다.

참고: 자식 프로세스 시작에성공했다는 것은 운영 체제가 프로세스를 성공적으로 생성하고, 프로세스 ID와 같이 모든 프로세스가 갖는 리소스를 할당했다는 것을 의미할 뿐입니다. 자식 프로세스는 매우 초기에 충돌하거나 다른 이유로 실패하여 예상된 출력을 생성하지 못할 수도 있습니다. 대부분의 운영 체제에서 여기에는 동적 링크 오류가 포함될 수 있습니다.

processId(), started(), waitForStarted(), setNativeArguments()도 참조하십시오 .

void QProcess::start(QIODeviceBase::OpenMode mode = ReadWrite)

setProgram()로 설정된 프로그램을 setArguments()로 설정된 인자와 함께 시작합니다. OpenMode는 mode 로 설정됩니다.

이 함수는 오버로드된 함수입니다.

open(), setProgram() 및 setArguments()도 참조하십시오 .

[since 6.0] void QProcess::startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)

command 명령을 새 프로세스에서 실행합니다. OpenMode는 mode 로 설정됩니다.

command 는 프로그램 이름과 인수를 모두 포함하는 단일 문자열입니다. 인수는 하나 이상의 공백으로 구분됩니다. 예:

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

공백이 포함된 인수는 새 프로세스에 올바르게 전달되도록 따옴표로 묶어야 합니다. 예:

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

command 문자열 내의 리터럴 따옴표는 세 개의 따옴표로 표시됩니다. 예:

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

command 문자열이 분할되고 따옴표가 제거된 후, 이 함수는 start()과 동일하게 동작합니다.

명령줄 인수를 하위 프로세스에 전달하는 시스템 API가 기본적으로 단일 문자열을 사용하는 운영 체제(Windows)에서는, ` QProcess`의 이식성 있는 목록 기반 API를 통해 전달할 수 없는 명령줄을 구성할 수 있습니다. 이러한 드문 경우에는 이 함수 대신 ` setProgram()` 및 ` setNativeArguments()`를 사용해야 합니다.

이 함수는 Qt 6.0에서 도입되었습니다.

splitCommand() 및 start()도 참조하십시오 .

bool QProcess::startDetached(qint64 *pid = nullptr)

setProgram() 함수로 설정된 프로그램을 setArguments() 함수로 설정된 인자와 함께 새로운 프로세스에서 시작하고, 해당 프로세스에서 분리합니다. 성공 시 true 를 반환하고, 그렇지 않으면 false 를 반환합니다. 호출한 프로세스가 종료되더라도 분리된 프로세스는 영향을 받지 않고 계속 실행됩니다.

유닉스: 시작된 프로세스는 자체 세션에서 실행되며 데몬처럼 동작합니다.

프로세스는 setWorkingDirectory() 함수로 설정된 디렉터리에서 시작됩니다. workingDirectory()가 비어 있으면 작업 디렉터리는 호출 프로세스로부터 상속됩니다.

함수가 성공하면 *pid 는 시작된 프로세스의 프로세스 식별자로 설정되고, 그렇지 않으면 -1로 설정됩니다. 자식 프로세스가 종료되어 PID가 예고 없이 무효화될 수 있다는 점에 유의하십시오. 또한, 자식 프로세스가 종료된 후 동일한 PID가 재사용되어 완전히 다른 프로세스에 의해 사용될 수도 있습니다. 사용자 코드는 이 변수를 사용할 때, 특히 운영 체제 수단을 통해 프로세스를 강제 종료하려는 경우 각별히 주의해야 합니다.

startDetached()는 다음 속성 설정자만 지원합니다:

QProcess 객체의 다른 모든 속성은 무시됩니다.

참고: 호출된프로세스는 호출하는 프로세스의 콘솔 창을 상속받습니다. 콘솔 출력을 억제하려면 표준/오류 출력을 QProcess::nullDevice()로 리디렉션하십시오.

start() 및 startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid)도 참조하십시오 .

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

인수 arguments 를 사용하여 프로그램 program 을 새 프로세스에서 시작하고, 해당 프로세스에서 분리합니다. 성공 시 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다. 호출한 프로세스가 종료되더라도 분리된 프로세스는 영향을 받지 않고 계속 실행됩니다.

인자 처리는 해당 start() 오버로드와 동일합니다.

프로세스는 workingDirectory 디렉터리에서 시작됩니다. workingDirectory 가 비어 있으면 작업 디렉터리는 호출 프로세스에서 상속됩니다.

함수가 성공하면 *pid 에 시작된 프로세스의 프로세스 식별자가 설정됩니다.

이 함수는 QProcess::startDetached()을 오버로드합니다.

start()도 참조하십시오 .

[private signal] void QProcess::started()

이 신호는 프로세스가 시작되었을 때 ` QProcess `에 의해 발신되며, ` state()`가 ` Running`를 반환할 때 발생합니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발송할 수는 없습니다.

QProcess::ProcessState QProcess::state() const

프로세스의 현재 상태를 반환합니다.

stateChanged() 및 error()도 참조하십시오 .

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

QProcess 의 상태가 변경될 때마다 이 신호가 발신됩니다. newState 인수는 QProcess 가 변경된 상태를 나타냅니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.

[static] QStringList QProcess::systemEnvironment()

호출 프로세스의 환경을 키=값 쌍의 목록으로 반환합니다. 예:

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

이 함수는 시스템 환경을 캐시하지 않습니다. 따라서 setenv 이나 putenv 와 같은 저수준 C 라이브러리 함수가 호출된 경우, 업데이트된 버전의 환경을 얻을 수 있습니다.

그러나 이 함수를 반복해서 호출하면 환경 변수 목록이 재구성되는데, 이는 상당한 부하를 유발하는 작업이라는 점에 유의하십시오.

참고: 새로운 코드를작성할 때는 QProcessEnvironment::systemEnvironment()을 사용하는 것이 좋습니다.

QProcessEnvironment::systemEnvironment() 및 setProcessEnvironment()도 참조하십시오 .

[slot] void QProcess::terminate()

프로세스를 종료하려고 시도합니다.

이 함수를 호출한다고 해서 프로세스가 반드시 종료되는 것은 아닙니다(저장되지 않은 파일이 있는지 사용자에게 확인하는 등의 기회가 주어집니다).

Windows에서 terminate()는 프로세스의 모든 최상위 창에 WM_CLOSE 메시지를 보낸 다음, 프로세스 자체의 메인 스레드에도 동일한 메시지를 보냅니다. Unix 및 macOS에서는 SIGTERM 신호가 전송됩니다.

이벤트 루프를 실행하지 않거나, 이벤트 루프가 WM_CLOSE 메시지를 처리하지 않는 Windows의 콘솔 애플리케이션은 kill()를 호출해야만 종료할 수 있습니다.

kill()도 참조하십시오 .

[noexcept, since 6.6] QProcess::UnixProcessParameters QProcess::unixProcessParameters() const

유닉스 시스템에서 자식 프로세스에 적용될 추가 플래그 및 설정을 설명하는 ` UnixProcessParameters ` 객체를 반환합니다. 기본 설정은 ` UnixProcessParameters`의 기본 생성자와 동일합니다.

참고: 이 함수는 유닉스 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.6에서 도입되었습니다.

setUnixProcessParameters() 및 childProcessModifier()도 참조하십시오 .

[override virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)

QIODevice::waitForBytesWritten(int msecs)를 재구현합니다.

bool QProcess::waitForFinished(int msecs = 30000)

프로세스가 완료되고 ` finished()` 신호가 발생하거나, ` msecs ` 밀리초가 경과할 때까지 차단됩니다.

프로세스가 완료되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다(작업이 시간 초과되었거나, 오류가 발생했거나, 이 QProcess 이 이미 완료된 경우).

이 함수는 이벤트 루프 없이도 작동할 수 있습니다. 비 GUI 애플리케이션을 작성하거나 비 GUI 스레드에서 I/O 작업을 수행할 때 유용합니다.

경고: 메인(GUI) 스레드에서 이 함수를호출하면 사용자 인터페이스가 멈출 수 있습니다.

msecs가 -1인 경우, 이 함수는 타임아웃되지 않습니다.

finished(), waitForStarted(), waitForReadyRead() 및 waitForBytesWritten()도 참조하십시오 .

[override virtual] bool QProcess::waitForReadyRead(int msecs = 30000)

QIODevice::waitForReadyRead(int msecs)를 재구현합니다.

bool QProcess::waitForStarted(int msecs = 30000)

프로세스가 시작되고 started() 신호가 발생하거나, msecs 밀리초가 경과할 때까지 대기합니다.

프로세스가 성공적으로 시작되면 true 를 반환하고, 그렇지 않은 경우(작업이 시간 초과되었거나 오류가 발생한 경우) false 를 반환합니다. 이 함수가 호출되기 전에 프로세스가 이미 성공적으로 시작된 경우, 즉시 반환됩니다.

이 함수는 이벤트 루프 없이도 작동할 수 있습니다. 비GUI 애플리케이션을 작성하거나 비GUI 스레드에서 I/O 작업을 수행할 때 유용합니다.

경고: 메인(GUI) 스레드에서 이 함수를호출하면 사용자 인터페이스가 멈출 수 있습니다.

msecs가 -1인 경우, 이 함수는 타임아웃되지 않습니다.

started(), waitForReadyRead(), waitForBytesWritten() 및 waitForFinished()도 참조하십시오 .

QString QProcess::workingDirectory() const

QProcess 에 작업 디렉터리가 지정된 경우, 이 함수는 프로그램이 시작되기 전에 QProcess 가 진입하게 될 작업 디렉터리를 반환합니다. 그렇지 않은 경우(즉, 디렉터리가 지정되지 않은 경우), 빈 문자열이 반환되며, QProcess 는 대신 애플리케이션의 현재 작업 디렉터리를 사용합니다.

setWorkingDirectory()도 참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.