转载时请注明出处和作者联系方式
作者联系方 式:Lutx <80437 at zj dot com>
Qt中已经包含了QtDBus模块, 但此模块只能在Unix系统下使用, 却不支持Windows系统. 这里介绍的是Windows系统下如何生成QtDBus库, 并通过Qt的例子和工具来演示DBus的运行和通讯. 欢迎交流和指正.
说明: 以下步骤的软件版本分别为, Qt - 4.6.0 for msvc, QtCreator - 1.3.0, winDBus - 1.2.4, 这些都可以在网上下载到.
整个过程分为4 个步骤 :
A. 生成 QtDBus 动态库 :
1. 在QtCreator 中打开 [QT-dir]/src/dbus/dbus.pro 项目 ;
[QT-dir]为Qt的安装目录, 比如C:/Qt/4.6.0;
2. 找到INCLUDEPATH 行
# INCLUDEPATH += .
修 改为
INCLUDEPATH += . [winDBus-dir]/include
LIBS_PRIVATE += -L[winDBus-dir]/lib
其 中"[winDBus-dir]" 为 winDBus 的所在目录 . 这里是要把winDBus的头文件和库文件加到项目路径中.
3. 生成项目. 完成后在 [QT-dir]/bin 目录下会生成 QtDBus4.dll 以及 QtDBusd4.dll 文件 , 在 [QT-dir]/lib 目录下会生成 QtDBus4.lib 以及 QtDBusd4.lib 以及上述的两个 dll 文件 .
B:生成 QtDBus Tools
1. 在QtCreator 中打开 [QT-dir]/tools/qdbus/qdbus.pro, 生成项目
2. 结束后会在[QT-dir]/bin 目录下生成四个可执行文件 qdbus*.exe
C:生成 QtDBus 例子
1. 在QtCreator 中打开 [QT-dir]/exmaples/dbus/dbus.pro, 生成项目
2. 结束后会在examples 目录的各自的子目录下生成可执行文件
D: 运行 Qt 的 Remote Control Car 例子
下 面来运行一下例子中的遥控车的程序.
1. 首先启动windbus service, 打开命令行窗口 cmd, 执行
cd [winDBus-dir]/bin
dbus-daemon --config-file=../etc/session.conf
2. 启动Qt 工具 qdbusviewer([QT-dir]/bin/qdbusviewer.exe) 来查询 DBus 总线和接口 , 该程序是上述步骤 B 中生成的 . 如果显示 " Error: Cannot connect to D-Bus: ", 原因是因为无法加载 dbus-1.dll, 可以将此文件从 winDBus/bin目录下复制到 [QT-dir]/bin 目录下 , 也可以将 winDBus/bin 的目录加到环境变量 PATH 中 . 另外启动此程序还需要环境变量 DBUS_SESSION_BUS_ADDRESS( 见 [winDBus-dir]/bin/dbus-env.bat 文件 ), 设置
set DBUS_SESSION_BUS_ADDRESS=tcp:host=localhost,port=12434
也可以在 命令行窗口中通过执行以下命令来执行:
[winDBus-dir]/bin/dbus-env.bat
[QT-dir]/bin/qdbusviewer.exe
启动后应该可以考到DBus 总线服务 org.freedesktop.DBus 以及 相应的方法
3. 启动遥控汽车程序([QT-dir]/examples/dbus/remotecontrolledcar/car/release/car.exe), 这时候 , 在 qdbusviewer 的 Service 栏目中会多出一个服务 , com.trolltech.CarExample
4. 启动遥控器程序([QT-dir]/examples/dbus/remotecontrolledcar/controller/release/controller.exe), 程序会自动连接刚才启动的 car 程序 , 利用界面上的 4 个按钮可以控制汽车的运动 .
以上就是生成QtDBus模块的过程, 接下来就是利用它来编写应用程序. 刚接触DBus, 欢迎熟悉的朋友交流DBus应用方面的经验.