私は c++ で qt dbus バインディングを使用しています。
現在、カスタム タイプ (クラス、構造体など) を dbus 経由で送信できますが、列挙型を送信することはできません。
これは、マクロを使用し、ブースト依存関係を持たない私のソリューションです。<< および >> 演算子を宣言するには、ヘッダー ファイルに以下のステートメントを記述する必要があります。
例えば:
DECLARE_ENUM_DATATYPE(QProcess::ProcessState)
1 つの .cpp ファイルに以下のステートメントを追加して、<< および >> 演算子を定義します。
CREATE_ENUM_DATATYPE(QProcess::ProcessState)
上記の関数は両方とも以下のファイルを必要とします。enumDBus.hpp として保存できます。
#ifndef _ENUM_DBUS_HPP
#define _ENUM_DBUS_HPP
#include <QtDBus/QDBusArgument>
#define DECLARE_ENUM_DATATYPE(ENUM_TYPE_DBUS)\
QDBusArgument &operator<<(QDBusArgument &argument, ENUM_TYPE_DBUS value);\
const QDBusArgument &operator>>(const QDBusArgument &argument, ENUM_TYPE_DBUS &val);
#define CREATE_ENUM_DATATYPE(ENUM_TYPE_DBUS)\
QDBusArgument &operator<<(QDBusArgument &argument, ENUM_TYPE_DBUS value)\
{\
argument.beginStructure();\
qlonglong newVal = (qlonglong)value;\
argument << newVal;\
argument.endStructure();\
return argument;\
}\
const QDBusArgument &operator>>(const QDBusArgument &argument, ENUM_TYPE_DBUS &val)\
{\
argument.beginStructure();\
qlonglong result = 0;\
argument >> result;\
val = (ENUM_TYPE_DBUS)result;\
argument.endStructure();\
return argument;\
}
#endif //_ENUM_DBUS_HPP