Qt DBus连接不适用于SLOT参数中的typedef

问题描述 投票:1回答:1

我可以使用QDBusConnection::connect和旧式QDBusConnection::connect语法将DBus信号连接到Qt插槽:

SLOT

SLOT调用成功,并且如果我为插槽使用#pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # include <QCoreApplication> # include <QDBusConnection> # include <QDBusMetaType> # include <QDebug> # include <QMap> # include <QString> # include <QVariant> #pragma GCC diagnostic pop using PropertyDictionary = QMap<QString, QVariant>; Q_DECLARE_METATYPE(PropertyDictionary) class MyLogger : public QObject { Q_OBJECT public slots: void log(QString const& interface, QMap<QString, QVariant> const& properties) { logTypedef(interface, properties); } void logTypedef(QString const& interface, PropertyDictionary const& properties) { qDebug() << "interface = " << interface; qDebug() << "properties = " << properties; } }; int main(int argc, char* argv[]) { qDBusRegisterMetaType<PropertyDictionary>(); QCoreApplication app{argc, argv}; MyLogger logger{}; auto const connected { QDBusConnection::systemBus().connect ( "org.freedesktop.timedate1", "/org/freedesktop/timedate1", "org.freedesktop.DBus.Properties", "PropertiesChanged", &logger, // SLOT(log(QString, QMap<QString, QVariant>)) // works SLOT(logTypedef(QString, PropertyDictionary)) // assert fails ) }; Q_ASSERT(connected); return app.exec(); } #include "DBusTimezoneApp.moc" 参数,则会接收到DBus信号。如果使用connect typedef,它将失败。

我知道C ++,但是我对QMap<QString, QVariant>魔术并不熟悉,因此希望对您有所帮助。

我正在使用Ubuntu存储库中的Ubuntu 18.04,Qt 5.9.5进行构建,使用>]

PropertyDictionary

我可以使用QDBusConnection :: connect和旧式SLOT语法将DBus信号连接到Qt插槽:#pragma GCC诊断推送#pragma GCC诊断已忽略“ -Wconversion”#include <...>

c++ qt typedef dbus qdbus
1个回答
0
投票
您必须使用moc注册PropertyDictionary:
© www.soinside.com 2019 - 2024. All rights reserved.