gpt4 book ai didi

c++ - Qt DBus 没有接收到信号

转载 作者:行者123 更新时间:2023-11-28 05:53:04 25 4
gpt4 key购买 nike

我一直在努力让 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();
}

最佳答案

这里的问题是当代码在 Release模式下构建时,Q_ASSERT()(或 assert())中的代码不会运行。这意味着您的 connect() 调用永远不会在 Release模式下执行。

因此,Q_ASSERT()/assert() 中的副作用是一个坏主意,应该避免,以确保代码独立于调试与 Release模式执行相同的操作。 (也是检查某些东西是否在 Debug模式下工作但在 Release模式下不工作的首要事情之一)。

关于c++ - Qt DBus 没有接收到信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com