13,007
回編集
(→Q_EMIT) |
編集の要約なし |
||
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> | |||
==== 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> | ||