「Qtの基礎 - プリプロセッサ」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
132行目: 132行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
== Q_GADGET ==
==== Q_GADGET ====
<code>QObject</code>クラスを継承せずに、Qtのメタオブジェクトシステムの一部の機能 (プロパティ、列挙型等) を利用可能にするマクロである。<br>
<code>QObject</code>クラスを継承せずに、Qtのメタオブジェクトシステムの一部の機能 (プロパティ、列挙型等) を利用可能にするマクロである。<br>
<br>
<br>
157行目: 157行目:
  Q_DECLARE_METATYPE(Point)
  Q_DECLARE_METATYPE(Point)
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br>
 
==== Q_ENUMマクロ ====
== Q_ENUMマクロ ==
列挙型をQtのメタオブジェクトシステムに登録するために使用する。<br>
列挙型をQtのメタオブジェクトシステムに登録するために使用する。<br>
これにより、列挙型の値を文字列に変換する、または、QMLで使用したりすることが可能になる。<br>
これにより、列挙型の値を文字列に変換する、または、QMLで使用したりすることが可能になる。<br>
<br>
<syntaxhighlight lang="c++">
class TrafficLight : public QObject
{
    Q_OBJECT
private:
    Color m_color = Color::Red;
public:
    enum class Color {
      Red,
      Yellow,
      Green
    };
    Q_ENUM(Color)
    TrafficLight(QObject *parent = nullptr) : QObject(parent) {}
    void setColor(Color color)
    {
      m_color = color;
      qDebug() << "Color set to:" << QMetaEnum::fromType<Color>().valueToKey(static_cast<int>(m_color));
    }
};
</syntaxhighlight>
<br><br>
<br><br>


== Q_DECLARE_METATYPE ==
== 型に関するマクロ ==
==== Q_DECLARE_METATYPE ====
カスタム型を<code>QVariant</code>クラスで使用可能にするためのマクロである。<br>
カスタム型を<code>QVariant</code>クラスで使用可能にするためのマクロである。<br>
これにより、その型を<code>QVariant</code>クラスに格納したり、シグナル / スロットシステムで使用することができる。<br>
これにより、その型を<code>QVariant</code>クラスに格納したり、シグナル / スロットシステムで使用することができる。<br>
<br>
<syntaxhighlight lang="c++">
struct CustomData
{
    int    id;
    QString name;
};
Q_DECLARE_METATYPE(CustomData)
// 使用例
void useCustomData()
{
    CustomData data{1, "Example"};
    QVariant variant = QVariant::fromValue(data);
    if (variant.canConvert<CustomData>()) {
      CustomData retrievedData = variant.value<CustomData>();
      qDebug() << "ID:" << retrievedData.id << "Name:" << retrievedData.name;
    }
}
</syntaxhighlight>
<br><br>
<br><br>


案内メニュー