Qt DBus未接收信号
Qt DBus not receiving signals
我一直在努力让Qt DBus工作,但没有运气。 似乎我的应用程序没有收到应有的信号。 我使用 dbus-monitor --system
监控了 DBus,它表明信号确实正在生成。 当我使用 Qt 进行方法 DBus 方法调用时,响应返回得很好。 即使在QDBUS_DEBUG=1的情况下运行,也不会打印任何内容显示Qt接收到信号。 我错过了一些明显的东西吗?
以下是应该可以工作但不能工作的代码(没有任何东西打印到控制台):
class Example1 : public QObject
{
Q_OBJECT
public:
Example1(QObject* parent = NULL) : QObject(parent)
{
}
void setupDBus()
{
// Get the system bus
QDBusConnection dBusSystem = QDBusConnection::systemBus();
// check if it is connected
if (!dBusSystem.isConnected())
{
qFatal("Cannot connect to the D-Bus session bus.");
return;
}
// register "device added"
Q_ASSERT(dBusSystem.connect("org.freedesktop.UDisks",
"/org/freedesktop/UDisks",
"org.freedesktop.UDisks",
"DeviceAdded",
this,
SLOT(deviceAdded(const QDBusObjectPath&))));
// register "device removed"
Q_ASSERT(dBusSystem.connect("org.freedesktop.UDisks",
"/org/freedesktop/UDisks",
"org.freedesktop.UDisks",
"DeviceRemoved",
this,
SLOT(deviceRemoved(const QDBusObjectPath&))));
}
private slots:
// slot for "device added"
void deviceAdded(const QDBusObjectPath &in)
{
qDebug() << "device added: "; //<< in.path();
}
// slot for "device removed"
void deviceRemoved(const QDBusObjectPath &in)
{
qDebug() << "device removed: "; //<< in.path();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Example1 example;
example.setupDBus();
return a.exec();
}
这里的问题是,当代码以发布模式构建时,Q_ASSERT()(或 assert())中的代码不会运行。这意味着您的 connect() 调用永远不会在发布模式下执行。
因此,Q_ASSERT()/assert() 内部的副作用是一个坏主意,应该避免,以确保代码独立于调试模式和发布模式做同样的事情。(也是检查某些内容在调试模式下是否有效但在发布模式下不起作用的第一件事)。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- QT-Dbus 信号/插槽
- 在C++glib应用程序中连接到dbus信号的最简单方法
- 这个Qt DBus信号连接代码是否正确
- Qt DBus未接收信号
- DBus-Glib,发送一个带有嵌套结构的信号