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
를 사용하는 경우, 이 함수가 반환되기 전에 다른 메서드 호출과 신호가 전달될 수 있으며 다른 Qt XML 큐에 대기 중인 신호와 이벤트도 전달될 수 있으므로 코드가 재진입을 처리할 수 있도록 준비해야 합니다.
참고: 이 함수는 스레드 안전합니다.
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)
이 인터페이스에서 method 에 지정된 원격 메서드를 args 을 인수로 사용하여 호출합니다. 이 함수는 호출을 큐에 넣은 후 즉시 반환합니다. 원격 함수의 응답은 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)
향후 모든 DBus 호출에 대한 시간 제한을 밀리초 단위로 설정합니다( timeout). -1은 기본 DBus 시간 제한(일반적으로 25초)을 의미합니다.
timeout()도 참조하세요 .
int QDBusAbstractInterface::timeout() const
시간 제한의 현재 값(밀리초)을 반환합니다. -1은 기본 DBus 시간 초과(일반적으로 25초)를 의미합니다.
setTimeout()도 참조하세요 .
© 2025 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.