Nemo Mobile D-Bus QML 플러그인을 사용하면 시스템 및 세션 버스의 서비스에 액세스하고 자체 서비스를 제공할 수 있다. D-Bus는 프로세스 간 통신에 사용된다.
저장소: https://github.com/sailfishos/nemo-qml-plugin-dbus
이 모듈에는 다음 QML 유형이 제공된다.
세션 버스 개체에서 함수 호출
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
}
}
}
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 | 운영자 | 2019.01.05 | 86596 |
8 |
QML에서 Websocket 서버와 통신
![]() | makersweb | 2021.09.18 | 852 |
» |
QML에서 D-Bus 통신
![]() | makersweb | 2023.03.15 | 759 |
6 |
OpacityMask 예제
![]() | makersweb | 2023.01.26 | 705 |
5 | QML과 코루틴(Coroutines) | makersweb | 2020.11.03 | 586 |
4 | QtQuick 애플리케이션에 Rive 애니메이션 통합 | makersweb | 2024.03.31 | 546 |
3 | 앱을 종료할 때 QML 바인딩 오류를 피하는 방법 | makersweb | 2021.08.08 | 509 |
2 | Binding 타입으로 객체 속성 간 묶기 | makersweb | 2022.03.04 | 438 |
1 | 그래픽 소프트웨어에서 디자인 내보내기 (Exporting Designs from Graphics Software) | j2doll | 2020.12.25 | 417 |