ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

QTÖÐDBusµÄÓ÷¨(Ò»)
2014-11-24 08:17:56 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:1´Î
Tags£ºDBus Ó÷¨

Ŀ ¼
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

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºAndroid IntentʵÏÖActivityÖ®¼ä.. ÏÂһƪ£ºUnix»·¾³¸ß¼¶±à³ÌµÚ¶þ°æ¶ÁÊé±Ê¼Ç

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Spring Boot Java£º (2025-12-26 16:20:19)
¡¤Spring Boot¤ÇHello (2025-12-26 16:20:15)
¡¤Spring ¤Î»ù±¾¤«¤éŒ (2025-12-26 16:20:12)
¡¤C++Ä£°å (template) (2025-12-26 15:49:49)
¡¤C ÓïÑÔÖÐÄ£°åµÄ¼¸ÖÖ (2025-12-26 15:49:47)