Я слушаю по интерфейсу dbus "org.freedesktop.DBus.Properties" в процессе обновления RAU C. Меня интересует деталь, которая представляет собой кортеж dbus (isi).
Я определил эту структуру:
struct RaucProgress{
int percentage;
QString message;
int nesting_depth;
RaucProgress(){}
};
Q_DECLARE_METATYPE(RaucProgress)
QDBusArgument &operator<<(QDBusArgument &argument, const RaucProgress &job);
const QDBusArgument &operator>>(const QDBusArgument &argument, RaucProgress &job);
QDBusArgument& operator<<(QDBusArgument &argument, const RaucProgress &progress)
{
argument.beginStructure();
argument << progress.percentage << progress.message << progress.nesting_depth;
argument.endStructure();
return argument;
}
const QDBusArgument& operator>>(const QDBusArgument &argument, RaucProgress &progress)
{
argument.beginStructure();
argument >> progress.percentage >> progress.message >> progress.nesting_depth;
argument.endStructure();
return argument;
}
Использование в слоте, вызываемом адаптером dbus, выглядит например:
void Updater::onRaucPropertyChanged(const QString &interface, const QVariantMap &changed_properties, const QStringList &invalidated_properties)
{
if(interface == DBUS_SERVICE_RAUC_INSTALLER && changed_properties.contains("Progress")){
volatile RaucProgress prog2 = qvariant_cast<RaucProgress>(changed_properties.value("Progress"));
}
}
Кажется, что объект prog2 содержит, казалось бы, случайные данные. Правильно ли выполнено приведение?
Просмотр объекта в отладчике: