2

QT では、以下の 16 ビット符号なしの表現が利用可能です。

typedef unsigned short int  uint16_t;   (in stdint.h)
typedef unsigned short      quint16;    (in qglobal.h)

これら2つの違いは何ですか?次の typedef を持つ外部ヘッダー ファイル (変更してはいけません) を取得しました。

typedef uint16_t MyCustomId;

この「MyCustomId」フィールドは、スロット信号で DBUS と通信するために使用されます。

class CMyDbusProxy: public QDBusAbstractInterface
{
Q_OBJECT
Q_SIGNALS: 
    void Test(MyCustomId);
};

問題は、DBUS サービスから送信されたシグナルが CMyDbusProxy で認識されないため、スロットがまったく起動されないことです。typedef を手動で次のように変更した場合 (これはすべきではありません。テスト用です):

typedef quint16 MyCustomId;

すべて正常に動作します。DBUS サービス側の信号には「signature='q'」があり、これは uint16 を意味します。

この型一致の問題を克服し、「uint16_t」で信号を受信するにはどうすればよいですか?

4

0 に答える 0