QDBusAbstractInterface Class
QDBusAbstractInterface 클래스는 Qt D-Bus 바인딩 내의 모든 D-Bus 인터페이스에 대한 기본 클래스로, 원격 인터페이스에 대한 접근을 가능하게 합니다. 더 보기...
| 헤더: | #include <QDBusAbstractInterface> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
| qmake: | QT += dbus |
| 상속: | QObject |
| 상속받는 항목: |
공개 함수
| virtual | ~QDBusAbstractInterface() |
| QDBusPendingCall | asyncCall(const QString &method, Args &&... args) |
| QDBusPendingCall | asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args) |
| QDBusMessage | call(const QString &method, Args &&... args) |
| QDBusMessage | call(QDBus::CallMode mode, const QString &method, Args &&... args) |
| QDBusMessage | callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args) |
| bool | callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod) |
| bool | callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot) |
| QDBusConnection | connection() const |
| QString | interface() const |
(since 6.7) bool | isInteractiveAuthorizationAllowed() const |
| bool | isValid() const |
| QDBusError | lastError() const |
| QString | path() const |
| QString | service() const |
(since 6.7) void | setInteractiveAuthorizationAllowed(bool enable) |
| void | setTimeout(int timeout) |
| int | timeout() const |
상세 설명
생성된 코드 클래스도 QDBusAbstractInterface에서 파생되며, 여기에 설명된 모든 메서드는 생성된 코드 클래스에도 유효합니다. 여기에 설명된 것 외에도, 생성된 코드 클래스는 원격 메서드에 대한 멤버 함수를 제공하며, 이를 통해 올바른 매개변수와 반환 값에 대한 컴파일 시간 검사뿐만 아니라 속성 유형 매칭 및 신호 매개변수 매칭도 가능합니다.
참조: QDBus 컴파일러 및 QDBusInterface.
멤버 함수 설명서
[virtual noexcept] QDBusAbstractInterface::~QDBusAbstractInterface()
이 객체의 리소스를 해제합니다.
template <typename... Args> QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, Args &&... args)
이 인터페이스의 method 메서드를 호출하고, args 를 해당 메서드에 전달합니다. 모든 args 는 QVariant 로 변환 가능해야 합니다.
call 의 매개변수는 D-Bus를 통해 입력 인수로 원격 함수에 전달됩니다. 반환된 QDBusPendingCall 객체를 사용하여 응답에 대한 정보를 확인할 수 있습니다.
사용 방법은 다음과 같습니다:
QDBusPendingCall pcall = interface->asyncCall("GetAPIVersion"_L1);
auto watcher = new QDBusPendingCallWatcher(pcall, this);
QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this,
[&](QDBusPendingCallWatcher *w) {
QString value = retrieveValue();
QDBusPendingReply<int> reply(*w);
QDBusPendingCall pcall;
if (reply.argumentAt<0>() >= 14)
pcall = interface->asyncCall("ProcessWorkUnicode"_L1, value);
else
pcall = interface->asyncCall("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());
w = new QDBusPendingCallWatcher(pcall);
QObject::connect(w, &QDBusPendingCallWatcher::finished, this,
&Abstract_DBus_Interface::callFinishedSlot);
});이 예제는 매개변수 0개, 1개, 2개를 사용하여 함수를 호출하는 방법을 보여주고, 각 호출에서 전달되는 서로 다른 매개변수 유형을 설명합니다( "ProcessWorkUnicode" 에 대한 첫 번째 호출에는 유니코드 문자열 하나가 포함되고, "ProcessWork" 에 대한 두 번째 호출에는 문자열 하나와 바이트 배열 하나가 포함됩니다). 블로킹(동기식) 호출에 대한 동일한 예제는 call()을 참조하십시오.
참고: Qt 5.14이전 버전에서는 이 함수가 최대 8개의 인자만 받아들였습니다.
참고: 구현상의 제한으로 인해 로컬 QDBusServer 에 대한메서드 호출은 절대 비동기적으로 수행되지 않습니다.
asyncCallWithArgumentList()도 참조하십시오 .
QDBusPendingCall QDBusAbstractInterface::asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args)
args 을 인수로 사용하여, 이 인터페이스의 method 로 지정된 원격 메서드를 호출합니다. 이 함수는 응답의 상태를 추적하고 응답이 도착한 후 그 내용에 접근하는 데 사용할 수 있는 QDBusPendingCall 객체를 반환합니다.
일반적으로 asyncCall()를 사용하여 호출을 수행해야 합니다.
참고: 구현상의 제한으로 인해, 애플리케이션 자체에서 등록한 객체에 대한메서드 호출은 절대 비동기적으로 수행되지 않습니다.
참고: 이 함수는 스레드 안전합니다.
template <typename... Args> QDBusMessage QDBusAbstractInterface::call(const QString &method, Args &&... args)
이 인터페이스의 method 메서드를 호출하고, args 를 해당 메서드에 전달합니다. 모든 args 는 QVariant 로 변환 가능해야 합니다.
call 의 매개변수는 D-Bus를 통해 입력 인수로 원격 함수에 전달됩니다. 출력 인수는 QDBusMessage 응답에 포함되어 반환됩니다. 응답이 오류 응답인 경우, lastError()도 오류 메시지의 내용으로 설정됩니다.
다음과 같이 사용할 수 있습니다:
QString value = retrieveValue();
QDBusMessage reply;
QDBusReply<int> api = interface->call("GetAPIVersion"_L1);
if (api >= 14)
reply = interface->call("ProcessWorkUnicode"_L1, value);
else
reply = interface->call("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());이 예제는 매개변수 0개, 1개, 2개를 사용하여 함수를 호출하는 방법을 보여주고, 각 호출에서 전달되는 서로 다른 매개변수 유형을 설명합니다( "ProcessWorkUnicode" 에 대한 첫 번째 호출에는 유니코드 문자열 하나가 포함되고, "ProcessWork" 에 대한 두 번째 호출에는 문자열 하나와 바이트 배열 하나가 포함됩니다). 비차단(비동기) 호출에 대한 동일한 예제는 asyncCall()을 참조하십시오.
참고: Qt 5.14이전 버전에서는 이 함수가 최대 8개의 인자만 받아들였습니다.
callWithArgumentList()도 참조하십시오 .
template <typename... Args> QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &method, Args &&... args)
이 인터페이스의 method 메서드를 호출하고, args 를 해당 메서드에 전달합니다. 모든 args 는 QVariant 로 변환 가능해야 합니다.
mode 가 NoWaitForReply 인 경우, 이 함수는 원격 메서드의 응답을 기다리지 않고 호출을 수행한 직후 즉시 반환됩니다. 그렇지 않은 경우, mode 는 응답이 도착할 때까지 기다리는 동안 이 함수가 Qt 이벤트 루프를 활성화해야 하는지 여부를 나타냅니다.
이 함수가 응답을 기다리기 위해 Qt 이벤트 루프로 재진입하는 경우, 사용자 입력을 차단합니다. 대기 중에는 신호 및 기타 메서드 호출이 애플리케이션으로 전달될 수 있습니다. 따라서 call()을 통해 호출이 이루어질 때마다 재진입을 처리할 준비가 되어 있어야 합니다.
참고: Qt 5.14이전 버전에서는 이 함수가 최대 8개의 인자만 허용했습니다.
이 함수는 오버로드된 함수입니다.
callWithArgumentList()도 참조하십시오 .
QDBusMessage QDBusAbstractInterface::callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args)
args 를 인수로 사용하여, 이 인터페이스의 method 로 지정된 원격 메서드에 호출을 보냅니다. 이 함수는 응답으로 수신된 메시지를 반환하며, 이는 일반적인 QDBusMessage::ReplyMessage (성공을 나타냄)이거나 QDBusMessage::ErrorMessage (호출이 실패한 경우)일 수 있습니다. mode 매개변수는 이 호출이 어떻게 수행되어야 하는지를 지정합니다.
호출이 성공하면 lastError()는 비워지며, 그렇지 않은 경우 이 호출에서 발생한 오류가 담겨 있습니다.
일반적으로 call()를 사용하여 호출을 수행해야 합니다.
경고: ` UseEventLoop`를 사용하는경우 , 코드는 재진입(reentrancy)을 처리할 수 있도록 준비되어야 합니다. 이 함수가 반환되기 전에 다른 메서드 호출 및 신호가 전달될 수 있으며, 다른 Qt 큐에 등록된 신호 및 이벤트도 전달될 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)
args 를 인수로 사용하여, 이 인터페이스의 method 로 지정된 원격 메서드에 호출을 전송합니다. 이 함수는 호출을 큐에 넣은 직후 반환됩니다. 원격 함수로부터의 응답은 객체 receiver 의 returnMethod 로 전달됩니다. 오류가 발생하면 대신 객체 receiver 의 errorMethod 가 호출됩니다.
이 함수는 대기열 등록에 성공하면 true 을 반환합니다. 이는 실행된 호출이 성공했음을 나타내는 것은 아닙니다. 실패할 경우 errorMethod 가 호출됩니다. 대기열 등록에 실패하면 이 함수는 false 을 반환하며, 어떤 슬롯도 호출되지 않습니다.
returnMethod 의 매개변수는 함수 호출에서 반환되는 유형이어야 합니다. 선택적으로, 마지막 매개변수나 유일한 매개변수로 QDBusMessage 매개변수를 가질 수 있습니다. errorMethod 의 유일한 매개변수는 QDBusError 이어야 합니다.
참고: 구현상의 제한으로 인해, 애플리케이션 자체에서 등록한 객체에 대한메서드 호출은 절대 비동기적으로 수행되지 않습니다.
QDBusError 및 QDBusMessage도 참조하십시오 .
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot)
이 함수는 더 이상 사용되지 않습니다. 오버로드된 버전을 사용해 주십시오.
args 를 인수로 사용하여, 이 인터페이스에서 method 로 지정된 원격 메서드에 호출을 큐에 넣습니다. 이 함수는 호출을 큐에 넣은 직후 즉시 반환됩니다. 원격 함수의 응답이나 해당 함수에서 발생된 오류는 객체 receiver 의 slot 슬롯으로 전달됩니다.
이 함수는 대기열 등록이 성공하면 true 를 반환합니다. 이는 호출이 성공했음을 의미하지는 않습니다. 등록에 실패하면 오류 메시지와 함께 슬롯이 호출됩니다. 이러한 상황에서는 lastError()가 설정되지 않습니다.
이 함수는 오버로드된 함수입니다.
QDBusError 및 QDBusMessage도 참조하십시오 .
QDBusConnection QDBusAbstractInterface::connection() const
이 인터페이스가 연결된 연결을 반환합니다.
QString QDBusAbstractInterface::interface() const
이 인터페이스의 이름을 반환합니다.
[since 6.7] bool QDBusAbstractInterface::isInteractiveAuthorizationAllowed() const
비동기 호출의 경우, 호출자가 대화형 인증을 기다릴 준비가 되어 있는지 여부를 반환합니다.
기본값은 ` false`입니다.
이 함수는 Qt 6.7에서 도입되었습니다.
setInteractiveAuthorizationAllowed() 및 QDBusMessage::setInteractiveAuthorizationAllowed()도 참조하십시오 .
bool QDBusAbstractInterface::isValid() const
이 객체가 원격 객체에 대한 유효한 참조인 경우 true 를 반환합니다. 이 인터페이스를 생성하는 과정에서 오류가 발생한 경우(예: 원격 애플리케이션이 존재하지 않는 경우)에는 false 를 반환합니다.
참고: 원격 객체를 다룰 때, QDBusInterface 를 생성할 때 해당 객체가 존재하는지 항상 확인할 수 있는 것은 아닙니다.
QDBusError QDBusAbstractInterface::lastError() const
마지막 작업에서 발생한 오류를 반환하거나, 마지막 작업에서 오류가 발생하지 않은 경우에는 무효 오류를 반환합니다.
QString QDBusAbstractInterface::path() const
이 인터페이스가 연결된 객체 경로를 반환합니다.
QString QDBusAbstractInterface::service() const
이 인터페이스가 연결된 서비스의 이름을 반환합니다.
[since 6.7] void QDBusAbstractInterface::setInteractiveAuthorizationAllowed(bool enable)
비동기 호출 시 호출자가 대화형 인증을 기다릴 준비가 되어 있는지 여부를 설정합니다.
enable 가 true 로 설정된 경우, 이 인터페이스를 통해 비동기 호출을 위해 생성된 D-Bus 메시지는 ALLOW_INTERACTIVE_AUTHORIZATION 플래그를 설정합니다.
이 플래그는 권한이 없는 코드가 더 높은 권한을 가진 메서드를 호출하고, 대화형 인증을 허용하는 인증 프레임워크가 배포된 경우에만 유용합니다.
기본값은 false 입니다.
이 함수는 Qt 6.7에서 도입되었습니다.
isInteractiveAuthorizationAllowed() 및 QDBusMessage::setInteractiveAuthorizationAllowed()도 참조하십시오 .
void QDBusAbstractInterface::setTimeout(int timeout)
timeout 에 대한 향후 모든 DBus 호출에 대한 타임아웃을 밀리초 단위로 설정합니다. -1은 기본 DBus 타임아웃(일반적으로 25초)을 의미합니다.
timeout()도 참조하십시오 .
int QDBusAbstractInterface::timeout() const
타임아웃의 현재 값을 밀리초 단위로 반환합니다. -1은 기본 DBus 타임아웃(일반적으로 25초)을 의미합니다.
setTimeout()도 참조하십시오 .
© 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.