Qt DBus не получает сигналы

Я пытался заставить работать Qt DBus, но не повезло. Кажется, что мое приложение не получает сигналы, которые оно должно. Я следил за использованием DBus dbus-monitor --system и это показывает, что сигналы действительно генерируются. Когда я делаю вызов метода DBus с помощью Qt, ответ возвращается просто отлично. Даже при работе с 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();
}

0

Решение

Проблема здесь в том, что код в Q_ASSERT () (или assert ()) не запускается, когда код построен в режиме выпуска. Это означает, что ваши вызовы connect () никогда не выполняются в режиме выпуска.

Таким образом, побочные эффекты внутри Q_ASSERT () / assert () являются плохой идеей, и их следует избегать, чтобы гарантировать, что код делает то же самое независимо от режима отладки и выпуска. (также одна из первых вещей, чтобы проверить, работает ли что-то в режиме отладки, но не в режиме выпуска).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]