한국어
Qt
 

QML and Qt Quick QML에서 D-Bus 통신

makersweb 2023.03.15 17:47 조회 수 : 4923

Nemo Mobile D-Bus QML 플러그인을 사용하면 시스템 및 세션 버스의 서비스에 액세스하고 자체 서비스를 제공할 수 있다. D-Bus는 프로세스 간 통신에 사용된다.

 

저장소: https://github.com/sailfishos/nemo-qml-plugin-dbus

 

QML Types

이 모듈에는 다음 QML 유형이 제공된다.

  • DBusAdaptor : DBusAdaptor 개체는 시스템 또는 세션 버스에서 D-Bus 서비스를 제공하는 데 사용할 수 있다. 서비스가 활성화되어 있는 한 시스템의 다른 응용 프로그램에서 이 서비스를 호출할 수 있다. QML의 DBusAdaptor는 D-Bus를 통해 간단한 객체를 노출하는 수단을 제공하기 위한 것이다. 보다 복잡한 사용 사례의 경우 C++ 및 Qt DBus 모듈을 사용하는 것이 좋다.
  • DBusInterface : DBusInterface 개체는 시스템 및 세션 버스에 있는 개체의 메서드를 호출하고 신호(signalsEnabled 참조)를 수신하고 해당 개체의 속성을 읽는 데 사용할 수 있다.

Examples

세션 버스 개체에서 함수 호출

import QtQuick 2.0
import Nemo.DBus 2.0

Item {
    DBusInterface {
        id: profiled

        service: 'com.nokia.profiled'
        iface: 'com.nokia.profiled'
        path: '/com/nokia/profiled'
    }

    Component.onCompleted: {
        // Call the "set_profile" method here
        profiled.call('set_profile', ['silent']);
    }
}

 

함수 호출 및 반환 값 얻기

import QtQuick 2.0
import Nemo.DBus 2.0

Item {
    DBusInterface {
        id: profiled

        service: 'com.nokia.profiled'
        iface: 'com.nokia.profiled'
        path: '/com/nokia/profiled'
    }

    Component.onCompleted: {
        // Call the "get_profile" method without arguments, and
        // when it returns, call the passed-in callback method
        profiled.typedCall('get_profile', [], function (result) {
            // This will be called when the result is available
            console.log('Got profile: ' + result);
        });
    }
}

 

D-Bus 객체의 시그널 수신

import QtQuick 2.0
import Nemo.DBus 2.0

Item {
    DBusInterface {
        id: profiled

        service: 'com.nokia.profiled'
        iface: 'com.nokia.profiled'
        path: '/com/nokia/profiled'

        signalsEnabled: true

        function profile_changed(changed, active, profile, values) {
            if (changed && active)
                console.log("Profile changed to:", profile)
        }
    }
}

 

 

ConnMan 의 D-Bus 제어 인터페이스를 통해 네트워크 연결 상태 감지

 

ConnMan은 Linux 를 실행하는 임베디드 장치에 중점을 둔 인터넷 연결 관리자다. 인터넷 연결을 관리하기 위한 연결 관리 데몬(connmand)이 있고 이 데몬은 D-Bus 제어 인터페이스를 제공한다. 따라서 응용프로그램은 D-Bus를 사용하여 ConnMan 서비스를 이용할 수 있다.

 

다음은 DBusInterface 개체를 통해 QML에서 간단하게 connmand 과 연결하고 인터넷 연결 상태가 바뀔 때마다 UI에 표시하는 방법을 보여준다.

import QtQuick 2.15
import QtQuick.Window 2.15
import Nemo.DBus 2.0

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Network State")

    DBusInterface {
        id: connmanManager

        // Connman on the D-Bus system bus
        bus: DBus.SystemBus

        service: 'net.connman'
        iface: 'net.connman.Manager'
        path: '/'

        signalsEnabled: true

        // Will be called when the "PropertyChanged" signal is received.
        function propertyChanged(p, v) {
            console.log("Property Changed:", p, v)
            if ( p === 'State' ) {
                state.text = v
            }
        }
    }

    Column {
        anchors.centerIn: parent
        Text {
            id: stateLabel
            text: "네트워크 상태"
            font.pixelSize: 28
            horizontalAlignment: Text.AlignHCenter
        }
        Text {
            id: state
            width: parent.width

            font.pixelSize: 22
            horizontalAlignment: Text.AlignHCenter
        }
    }
}

 

ConnMan_State.png

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 118809
60 QNetworkAccessManager를 통해 HTTP POST 하는 예제 makersweb 2019.01.17 8045
59 Qt Bluetooth를 이용한 시리얼(Serial) 통신 file makersweb 2019.02.17 8137
58 Windows에서 Qt D-Bus를 사용하여 프로세스간 통신(IPC) file makersweb 2019.05.02 8304
57 Qml 기본 컴포넌트 강좌 (4) - 모델 리스팅(Listing) file 운영자 2019.02.23 8455
56 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 8518
55 QML에서 앵커(anchors)로 위치 지정 file makersweb 2021.10.05 8562
54 QTextCodec클래스를 사용하여 유니코드와 EUC-KR 변환 makersweb 2019.03.25 8627
53 Widgets(C++) 기반의 기본 스타일을 Dark 테마 및 Material 디자인 스타일로 바꾸기 file makersweb 2023.01.28 8666
52 Qt응용프로그램 실행 시 콘솔창(터미널)같이 띄우기 file makersweb 2019.01.16 8852
51 라즈베리파이4에 대한 Qt 5.14.1 크로스컴파일 [1] file makersweb 2020.02.12 8989
50 Qml에서 키보드 입력 이벤트 핸들링 file makersweb 2018.08.09 9003
49 C++로 구현된 모델을 QML의 ListView에서 참조 file makersweb 2019.09.07 9031
48 QString 문자열에서 숫자만 추출해서 QString으로 반환 makersweb 2017.01.10 9149
47 Qt 를 사용하거나 기반으로 하는 응용프로그램 file makersweb 2021.01.30 9261
46 멀티 스레드환경, 스레드에 안전한 이벤트처리 makersweb 2016.10.27 9313
45 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 9357
44 Windows에서 라즈베리파이3 Qt 어플리케이션 개발 및 원격 실행 file makersweb 2018.02.23 9474
43 C++로 작성한 클래스를 QML에서 생성 file makersweb 2021.02.10 9482
42 UI 폼(Form)작성 시 탭 순서(Tab Order) 설정 file makersweb 2020.08.24 9499
41 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 9499