5

私は c++ で qt dbus バインディングを使用しています。

現在、カスタム タイプ (クラス、構造体など) を dbus 経由で送信できますが、列挙型を送信することはできません。

こちらのリンクも試しましたが、わかりません

4

2 に答える 2

1

これは、マクロを使用し、ブースト依存関係を持たない私のソリューションです。<< および >> 演算子を宣言するには、ヘッダー ファイルに以下のステートメントを記述する必要があります。

例えば:

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
于 2014-03-13T14:24:26.583 に答える