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 | 86836 |
8 | z-order 를 컨트롤 하기위한 방법 | makersweb | 2015.05.13 | 6651 |
7 | QML내에서의 시그널, 슬롯 시스템 | makersweb | 2019.09.29 | 7112 |
6 | Qml 기본 컴포넌트 강좌 (2) [2] | makersweb | 2019.01.05 | 8748 |
5 | QML 강좌 - 동적 Listing (ListView) | makersweb | 2019.06.01 | 10250 |
4 | Qml 기본 컴포넌트 강좌 (1) | makersweb | 2019.01.03 | 12256 |
3 | QML과 QtQuick 모듈 개념과 기본 타입들 | makersweb | 2019.04.26 | 13537 |
2 | Qml과 C++로 구현하는 GUI어플리케이션 | makersweb | 2018.12.25 | 14198 |
1 | QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] | makersweb | 2019.05.26 | 15170 |