Ŀ ¼
1 ¸ÅÊö... 2
2 QTÖÐDbusµÄ×î¼òµ¥µÄÓ÷¨... 3
3 QTÖÐDBusµÄ³£¹æÓ÷¨... 4
3.1 ¿Í»§¶ËµÄÓ÷¨1£ºÊ¹ÓÃQDBusMessage. 4
3.2¿Í»§¶ËµÄÓ÷¨2£ºÊ¹ÓÃDBusInterface. 4
3.3 ¿Í»§¶ËµÄÓ÷¨3£ºÊ¹ÓÃDBusProxy. 5
3.4·þÎñ¶ËµÄÓ÷¨1£ºÖ±½Ó×¢²á¶ÔÏóºÍ·þÎñ... 6
3.5 ·þÎñ¶ËµÄÓ÷¨2£ºÊ¹ÓÃDBusAdapter 6
4 QTÖÐDbusµÄÌØÊâµÄÓ÷¨(ʹÓÃQTµÄÐźÅ) 7
1 ¸ÅÊö
D-BusÊÇÒ»Öָ߼¶µÄ½ø³Ì¼äͨÐÅ»úÖÆ£¬ËüÓÉfreedesktop.orgÏîÄ¿Ìṩ£¬Ê¹ÓÃGPLÐí¿ÉÖ¤·¢ÐС£D-Bus×îÖ÷ÒªµÄÓÃ;ÊÇÔÚLinux×ÀÃæ»·¾³Îª½ø³ÌÌṩͨÐÅ£¬Í¬Ê±Äܽ«Linux×ÀÃæ»·¾³ºÍLinuxÄÚºËʼþ×÷ΪÏûÏ¢´«µÝµ½½ø³Ì¡£D-BusµÄÖ÷Òª¸ÅÂÊΪ×ÜÏߣ¬×¢²áºóµÄ½ø³Ì¿Éͨ¹ý×ÜÏß½ÓÊÕ»ò´«µÝÏûÏ¢£¬½ø³ÌÒ²¿É×¢²áºóµÈ´ýÄÚºËʼþÏìÓ¦£¬ÀýÈçµÈ´ýÍøÂç״̬µÄת±ä»òÕß¼ÆËã»ú·¢³ö¹Ø»úÖ¸ÁĿǰ£¬D-BusÒѱ»´ó¶àÊýLinux·¢ÐаæËù²ÉÓ㬿ª·¢Õß¿ÉʹÓÃD-BusʵÏÖ¸÷ÖÖ¸´ÔӵĽø³Ì¼äͨÐÅÈÎÎñ¡£
D-BusÊÇÒ»¸öÏûÏ¢×ÜÏßϵͳ£¬Æä¹¦ÄÜÒѺ¸Ç½ø³Ì¼äͨÐŵÄËùÓÐÐèÇ󣬲¢¾ß±¸Ò»Ð©ÌØÊâµÄÓÃ;¡£D-BusÊÇÈý²ã¼Ü¹¹µÄ½ø³Ì¼äͨÐÅϵͳ£¬ÆäÖаüÀ¨£º
½Ó¿Ú²ã£º½Ó¿Ú²ãÓɺ¯Êý¿âlibdbusÌṩ£¬½ø³Ì¿Éͨ¹ý¸Ã¿âʹÓÃD-BusµÄÄÜÁ¦¡£
×ÜÏ߲㣺×ÜÏß²ãʵ¼ÊÉÏÊÇÓÉD-Bus×ÜÏßÊØ»¤½ø³ÌÌṩµÄ¡£ËüÔÚLinuxϵͳÆô¶¯Ê±ÔËÐУ¬¸ºÔð½ø³Ì¼äµÄÏûϢ·Óɺʹ«µÝ£¬ÆäÖаüÀ¨LinuxÄں˺ÍLinux×ÀÃæ»·¾³µÄÏûÏ¢´«µÝ¡£
°ü×°²ã£º°ü×°²ãһϵÁлùÓÚÌØ¶¨Ó¦ÓóÌÐò¿ò¼ÜµÄWrapper¿â¡£
ÔÚQTÖеÄDbusÊÇʹÓõÄDbusµÄ°ü×°²ãlibdbus-qt.
Òª²é¿´Dbus×ÜÏßÉϵķþÎñºÍ¶ÔÏó¿ÉÒÔ½èÖúd-feet ºÍqdbusviewer
Òª·¢ËÍÐźſÉÒÔʹÓÃdbus-send,Òª²é¿´DbusÉϵÄÏûÏ¢Á÷¿ÉÒÔʹÓÃdbus-monitor
QT DbusÊÇÔÚQT4.2ÖвÅÒý½øµ½QTÖÐÀ´µÄ£¬»¹ÓкܶàµÄµØ·½²»ÊǺÜÍêÉÆ£¬ÔÚÍøÉÏDBusµÄ×ÊÁϱȽ϶࣬²»¹ýºÜ¶à¶¼ÊÇ»ùÈëGTKµÄ£¬»ùÈëQTµÄ×ÊÁÏ»¹±È½ÏµÄÉÙ¡£
2 QTÖÐDbusµÄ×î¼òµ¥µÄÓ÷¨
¹ØÓÚQTÖеÄDBusµÄÓ÷¨½éÉܵÄÎÄÕ±ȽϵÄÉÙ£¬ÍøÉÏÖ»ÓÐÕâÆªÎÄÕ£¨¹úÍâµÄÍøÕ¾ÉÏ¿ÉÄÜÓиü¶à£¬Ö»ÊÇûÓз¢ÏÖ¶øÒÑ£©ºÍQTÖеÄËĸöÀý×Ó³ÌÐò¡£
Õâ¸ö×î¼òµ¥µÄÓ÷¨ÊÇÔÚʹÓÃÖз¢Ïֵ쬲»ÐèÒªÔÚDbusµÄÊØ»¤½ø³ÌÉÏ×¢²á·þÎñºÍ×¢²á¶ÔÏó¡£
×¢²áÁ˶ÔÏóºó£º¶ÔÏóÖеĵ¼³öµÄ²Û¾Í¿ÉÒÔ¹©ÆäËûµÄ¿Í»§¶ËÀ´µ÷ÓÃÁË¡£
×¢²áÁË·þÎñºó£º¶ÔÏó¾ÍÓÐÁËÒ»¸ö¹«¹²Ãû£¬Ã»ÓÐ×¢²áÊÇÖ»ÓÐÈý¸öΨһÃû¡£
ÔÚ·¢ËͶËÖ»Ðè´´½¨Ò»¸öÐźÅÔºó·¢Ëͼ´¿É£¬
ÀýÈ磺
1) ´´½¨QTµÄDBusÐźÅ
QDBusMessage msg =QDBusMessage::createSignal("/hotel/path", "hotel.interface", "checkIn");
2) ¸øÐźŸ³Öµ
msg<ui->checkInlineEdit->text().toInt();
3) ·¢ÉäÐźÅ
QDBusConnection::sessionBus().send(msg);
ÔÚ½ÓÊܶËͬÑùÖ»ÐèÒª¼òµ¥µÄÁ½Èý²½¼´¿É
1) °ó¶¨ÐźÅ
QDBusConnection::sessionBus().connect(QString(),QString(),"dbus.client. interface","Active",this,SLOT(ActiveEvent(int)));
2) ÔÚ²ÛÖнøÐÐÏà¹ØµÄ´¦Àí
ÔÚActiveEvent²ÛÖÐÖ´ÐÐÄãµÄÓ¦ÓóÌÐòÐèÒª¶ÔÕâ¸öÐźÅ×ö³öµÄ·´Ó¦¼´¿É¡£
ÕâÑùµÄʹÓÃÔÚDBUSµÄÊØ»¤½ø³ÌÖÐûÓзþÎñ£¬Ö»ÓÐÈý¸öΨһÃû£¬Ã»Óй«¹²Ãû£¬Ò²Ã»ÓÐÈκεÄÐźš¢²Û¡¢ÊôÐÔ¡£
¿ÉÒÔͨ¹ýd-feet¡¢ qdbusvieweÀ´²é¿´¡£
¿ÉÒÔͨ¹ýdbus-monitor¼àÊÓÐźŷ¢Ë͹ý³Ì
¿ÉÒԲο¼Ê¾ÀýDBusSignalMethodÖÐDBusServerDBusSignalºÍDBusClientDBusSignal
3 QTÖÐDBusµÄ³£¹æÓ÷¨
ÔÚÒÔÏÂÕâÆªÎÄÕÂÖÐÒѾºÜºÃµÄ½éÉÜÁËQT DBusµÄ¸÷ÖÖ³£¹æµÄÓ÷¨ÁË£¬Ôڴ˾ÍÖØ¸´ÁË£¬ÕâÖÖÓ÷¨Ö÷ÒªÊÇÔÚ·þÎñ¶Ë£¬ÐèÒªÔÚDBusµÄÊØ»¤½ø³ÌÉÏ×¢²á¶ÔÏóºÍ×¢²á·þÎñ£¬ÔºóÆäËûµÄ¿Í»§¶Ë¾Í¿ÉÒÔ×ÔÓɵĵ÷ÓÃÁË¡£
²»¹ýÕâÖÖ·½Ê½Ò²ÓÐÒ»¸öºÃ´¦£¬µ÷ÓÃÊÇ·þÎñ¶ËµÄ·µ»ØµÄ²ÎÊý¾ÍÖ»·¢¸øµ÷ÓõĿͻ§¶Ë£¬ÊÇÒ»¶ÔÒ»µÄ£¬²»ÏëÉÏÃæµÄÓÃÐźŵķ½Ê½£¬Ðźŵķ½Ê½£¬·¢Ë͵ÄÐźÅÊÇÒ»¶Ô¶àµÄ¡£
ÔÚÒ²Óм¸¸öСµÄÀý×Ó³ÌÐòÊǸù¾ÝD-BusºÍQT4 £¨wwang's blogÒ»ËòÑÌÓêÈÎÆ½Éú£©µÄÀý×ӸıàµÄ¡£
ÔÚ³£¹æÓ÷¨ÖÐÒ²·Ö¿Í»§¶ËºÍ·þÎñ¶ËµÄ£¬
¿Í»§¶ËÓÐÈýÖÖÓ÷¨£¬·þÎñ¶ËÓÐÁ½¸öÓ÷¨¡£
3.1 ¿Í»§¶ËµÄÓ÷¨1£ºÊ¹ÓÃQDBusMessage
¿ÉÒԲο¼ÊµÀýDBusMessageÖеÄDBusServerºÍDBusClient
1) ´´½¨Ò»¸öQDBusMessageµÄ·½·¨µ÷ÓÃ
a) QDBusMessage m = QDBusMessage::createMethodCall("hotel.server",
i. "/hotel/path",
ii. "hotel.interface",
iii. "checkIn");
2) ¸ø·½·¨´«µÝ²ÎÊý
a) m<ui->checkInlineEdit->text().toInt();
3) µ÷Ó÷½·¨
a) QDBusMessage response = QDBusConnection::sessionBus().call(m);
4) ÅжϷ½·¨µÄ·µ»ØÖµ
if (response.type() == QDBusMessage::ReplyMessage) {
// QDBusMessageµÄarguments²»½ö¿ÉÒÔÓÃÀ´´æ´¢·¢Ë͵IJÎÊý£¬Ò²ÓÃÀ´´æ´¢·µ»ØÖµ;
// ÕâÀïÈ¡µÃcheckInµÄ·µ»ØÖµ
int num_room = response.arguments().takeFirst().toInt();
qDebug("Got %d %s\n", num_room, (num_room > 1) "rooms" : "room");
} else
{
qDebug( "Check In fail!\n");
}
3.2¿Í»§¶ËµÄÓ÷¨2£ºÊ¹ÓÃDBusInterface
¿ÉÒԲο¼ÊµÀýDBusInterfaceÖеÄDB