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」で信号を受信するにはどうすればよいですか?