QMetaType Class
QMetaType クラスは、メタオブジェクトシステムにおける名前付き型を管理します。詳細...
| ヘッダー: | #include <QMetaType> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
注:このクラスのすべての関数はスレッドセーフです。
QMetaType の比較
| カテゴリ | 比較可能な型 |
|---|---|
| 等価性 | QMetaType |
パブリック型
| enum | Type { Void, Bool, Int, UInt, Double, …, UnknownType } |
| enum | TypeFlag { NeedsConstruction, NeedsCopyConstruction, NeedsMoveConstruction, NeedsDestruction, RelocatableType, …, IsConst } |
| flags | TypeFlags |
パブリック関数
(since 6.0) | QMetaType() |
| QMetaType(int typeId) | |
(since 6.0) qsizetype | alignOf() const |
(since 6.0) QPartialOrdering | compare(const void *lhs, const void *rhs) const |
| void * | construct(void *where, const void *copy = nullptr) const |
| void * | create(const void *copy = nullptr) const |
| bool | debugStream(QDebug &dbg, const void *rhs) |
| void | destroy(void *data) const |
| void | destruct(void *data) const |
(since 6.0) bool | equals(const void *lhs, const void *rhs) const |
| QMetaType::TypeFlags | flags() const |
(since 6.1) bool | hasRegisteredDataStreamOperators() const |
(since 6.0) bool | hasRegisteredDebugStreamOperator() const |
| int | id() const |
(since 6.5) bool | isCopyConstructible() const |
(since 6.5) bool | isDefaultConstructible() const |
(since 6.5) bool | isDestructible() const |
| bool | isEqualityComparable() const |
(since 6.5) bool | isMoveConstructible() const |
| bool | isOrdered() const |
| bool | isRegistered() const |
| bool | isValid() const |
| bool | load(QDataStream &stream, void *data) const |
| const QMetaObject * | metaObject() const |
| const char * | name() const |
(since 6.5) void | registerType() const |
| bool | save(QDataStream &stream, const void *data) const |
| qsizetype | sizeOf() const |
(since 6.6) QMetaType | underlyingType() const |
静的パブリックメンバー
| bool | canConvert(QMetaType fromType, QMetaType toType) |
| bool | canView(QMetaType fromType, QMetaType toType) |
| bool | convert(QMetaType fromType, const void *from, QMetaType toType, void *to) |
| QMetaType | fromName(QByteArrayView typeName) |
| QMetaType | fromType() |
| bool | hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType) |
| bool | hasRegisteredConverterFunction() |
| bool | hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType) |
(since 6.0) bool | hasRegisteredMutableViewFunction() |
| bool | isRegistered(int type) |
| bool | registerConverter() |
| bool | registerConverter(To (From::*function)() const) |
| bool | registerConverter(To (From::*function)(bool *) const) |
| bool | registerConverter(UnaryFunction function) |
(since 6.0) bool | registerMutableView(To (From::*function)()) |
(since 6.0) bool | registerMutableView(UnaryFunction function) |
(since 6.0) bool | view(QMetaType fromType, void *from, QMetaType toType, void *to) |
関連する非メンバー
(since 6.4) size_t | qHash(QMetaType key, size_t seed = 0) |
| int | qMetaTypeId() |
| int | qRegisterMetaType() |
(since 6.5) int | qRegisterMetaType(QMetaType meta) |
| bool | operator!=(const QMetaType &lhs, const QMetaType &rhs) |
(since 6.5) QDebug | operator<<(QDebug d, QMetaType m) |
| bool | operator==(const QMetaType &lhs, const QMetaType &rhs) |
マクロ
| Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container) | |
| Q_DECLARE_METATYPE(Type) | |
| Q_DECLARE_OPAQUE_POINTER(PointerType) | |
| Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container) | |
| Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer) |
詳細な説明
このクラスは、QVariant およびキュー化されたシグナル・スロットの接続において、型をマーシャリングするためのヘルパークラスとして使用されます。このクラスは、型名と型を関連付け、実行時に動的に生成および破棄できるようにします。
型名は、qRegisterMetaType() またはregisterType() を使用して QMetaType に登録できます。ほとんどの操作では登録は必要ありませんが、文字列形式の型名を QMetaType オブジェクトまたはその型の ID に解決しようとする操作では登録が必要です。 これには、QObject::connect() を使用する旧式のシグナル・スロットの接続、QDataStream からQVariant までのユーザー型を読み込む操作、あるいは QML、D-Bus、JavaScript などの他の言語や IPC メカニズムへのバインディングなどが含まれます。
以下のコードは、名前によってMyClass のインスタンスを割り当ておよび破棄するもので、これを行うには、MyClass が事前に登録されている必要があります。
QMetaType type = QMetaType::fromName("MyClass");
if (type.isValid()) {
void *myClassPtr = type.create();
//...
type.destroy(myClassPtr);
myClassPtr = nullptr;
}ストリーム演算子 `operator<<() ` および `operator>>() ` を、カスタム型を格納する `QVariant ` オブジェクトに対して動作させたい場合、そのカスタム型は `operator<<() ` および `operator>>() ` 演算子を提供する必要があります。
Q_DECLARE_METATYPE()、QVariant::setValue()、QVariant::value()、およびQVariant::fromValue()も参照してください 。
メンバ型のドキュメント
enum QMetaType::Type
QMetaType でサポートされている組み込み型は以下の通りです:
| 定数 | 値 | 説明 |
|---|---|---|
QMetaType::Void | 43 | void |
QMetaType::Bool | 1 | bool |
QMetaType::Int | 2 | int |
QMetaType::UInt | 3 | unsigned int |
QMetaType::Double | 6 | double |
QMetaType::QChar | 7 | QChar |
QMetaType::QString | 10 | QString |
QMetaType::QByteArray | 12 | QByteArray |
QMetaType::Nullptr | 51 | std::nullptr_t |
QMetaType::VoidStar | 31 | void * |
QMetaType::Long | 32 | long |
QMetaType::LongLong | 4 | LongLong |
QMetaType::Short | 33 | short |
QMetaType::Char | 34 | char |
QMetaType::Char16 | 56 | char16_t |
QMetaType::Char32 | 57 | char32_t |
QMetaType::ULong | 35 | unsigned long |
QMetaType::ULongLong | 5 | ULongLong |
QMetaType::UShort | 36 | unsigned short |
QMetaType::SChar | 40 | signed char |
QMetaType::UChar | 37 | unsigned char |
QMetaType::Float | 38 | float |
QMetaType::Float16 | 63 | qfloat16 |
QMetaType::QObjectStar | 39 | QObject * |
QMetaType::QBitArray | 13 | QBitArray |
QMetaType::QBitmap | 0x1009 | QBitmap |
QMetaType::QBrush | 0x1002 | QBrush |
QMetaType::QByteArrayList | 49 | QByteArrayList |
QMetaType::QCborArray | 54 | QCborArray |
QMetaType::QCborMap | 55 | QCborMap |
QMetaType::QCborSimpleType | 52 | QCborSimpleType |
QMetaType::QCborValue | 53 | QCborValue |
QMetaType::QColor | 0x1003 | QColor |
QMetaType::QColorSpace | 0x1017 | QColorSpace (Qt 5.15で導入) |
QMetaType::QCursor | 0x100a | QCursor |
QMetaType::QDate | 14 | QDate |
QMetaType::QDateTime | 16 | QDateTime |
QMetaType::QEasingCurve | 29 | QEasingCurve |
QMetaType::QFont | 0x1000 | QFont |
QMetaType::QIcon | 0x1005 | QIcon |
QMetaType::QImage | 0x1006 | QImage |
QMetaType::QJsonArray | 47 | QJsonArray |
QMetaType::QJsonDocument | 48 | QJsonDocument |
QMetaType::QJsonObject | 46 | QJsonObject |
QMetaType::QJsonValue | 45 | QJsonValue |
QMetaType::QKeySequence | 0x100b | QKeySequence |
QMetaType::QLine | 23 | QLine |
QMetaType::QLineF | 24 | QLineF |
QMetaType::QLocale | 18 | QLocale |
QMetaType::QMatrix4x4 | 0x1011 | QMatrix4x4 |
QMetaType::QModelIndex | 42 | QModelIndex |
QMetaType::QPalette | 0x1004 | QPalette |
QMetaType::QPen | 0x100c | QPen |
QMetaType::QPersistentModelIndex | 50 | QPersistentModelIndex (Qt 5.5 で導入) |
QMetaType::QPixmap | 0x1001 | QPixmap |
QMetaType::QPoint | 25 | QPoint |
QMetaType::QPointF | 26 | QPointF |
QMetaType::QPolygon | 0x1007 | QPolygon |
QMetaType::QPolygonF | 0x1016 | QPolygonF |
QMetaType::QQuaternion | 0x1015 | QQuaternion |
QMetaType::QRect | 19 | QRect |
QMetaType::QRectF | 20 | QRectF |
QMetaType::QRegion | 0x1008 | QRegion |
QMetaType::QRegularExpression | 44 | QRegularExpression |
QMetaType::QSize | 21 | QSize |
QMetaType::QSizeF | 22 | QSizeF |
QMetaType::QSizePolicy | 0x2000 | QSizePolicy |
QMetaType::QStringList | 11 | QStringList |
QMetaType::QTextFormat | 0x100e | QTextFormat |
QMetaType::QTextLength | 0x100d | QTextLength |
QMetaType::QTime | 15 | QTime |
QMetaType::QTransform | 0x1010 | QTransform |
QMetaType::QUrl | 17 | QUrl |
QMetaType::QUuid | 30 | QUuid |
QMetaType::QVariant | 41 | QVariant |
QMetaType::QVariantHash | 28 | QVariantHash |
QMetaType::QVariantList | 9 | QVariantList |
QMetaType::QVariantMap | 8 | QVariantMap |
QMetaType::QVariantPair | 58 | QVariantPair |
QMetaType::QVector2D | 0x1012 | QVector2D |
QMetaType::QVector3D | 0x1013 | QVector3D |
QMetaType::QVector4D | 0x1014 | QVector4D |
QMetaType::User | 65536 | ユーザー定義型のベース値 |
QMetaType::UnknownType | 0 | これは無効な型 ID です。QMetaType から、登録されていない型に対してこの値が返されます |
追加の型は、qRegisterMetaType() を使用するか、registerType() を呼び出すことで登録できます。
type()も参照してください 。
enum QMetaType::TypeFlag
flags QMetaType::TypeFlags
この列挙型は、QMetaType でサポートされている型の属性を記述するものです。
| 定数 | 定数値 | 説明 |
|---|---|---|
QMetaType::NeedsConstruction | 0x1 | この型にはデフォルトコンストラクタがあります。このフラグが設定されていない場合、インスタンスは memset を使用して 0 に初期化しても安全です。 |
QMetaType::NeedsCopyConstruction (since Qt 6.5) | 0x4000 | この型には、非自明なコピーコンストラクタがあります。このフラグが設定されていない場合、インスタンスは memcpy を使用してコピーできます。 |
QMetaType::NeedsMoveConstruction (since Qt 6.5) | 0x8000 | この型には非自明な移動コンストラクタがあります。このフラグが設定されていない場合、インスタンスは memcpy を使用して移動できます。 |
QMetaType::NeedsDestruction | 0x2 | この型には非自明なデストラクタがあります。このフラグが設定されていない場合、オブジェクトを破棄する前にデストラクタを呼び出す必要はありません。 |
QMetaType::RelocatableType | 0x4 | この属性を持つ型のインスタンスは、memcpy を使用して別のメモリ位置に安全に移動できます。 |
QMetaType::IsEnumeration | 0x10 | この型は列挙型です。 |
QMetaType::IsUnsignedEnumeration | 0x100 | この型が列挙型の場合、その基底型は符号なし型です。 |
QMetaType::PointerToQObject | 0x8 | この型は、QObject から派生したクラスへのポインタです。 |
QMetaType::IsPointer | 0x800 | この型は、別の型へのポインタです。 |
QMetaType::IsConst | 0x2000 | この型は不変であることを示します。たとえば、const オブジェクトへのポインタである場合などです。 注: Qt 6.5以前では 、コピーコンストラクタまたはデストラクタのいずれかが非自明であった場合(つまり、型が自明でなかった場合)、NeedsConstruction フラグと NeedsDestruction フラグの両方が誤って設定されていました。 |
Needs フラグが設定されていても、メタ型には、関連する型のパブリックなコンストラクタやパブリックなデストラクタが存在しない場合があることに注意してください。
TypeFlags 型は、QFlags<TypeFlag> の typedef です。これは、TypeFlag 値の OR 組み合わせを格納します。
メンバ関数のドキュメント
[constexpr noexcept default, since 6.0] QMetaType::QMetaType()
デフォルトの、無効な QMetaType オブジェクトを生成します。
この関数は Qt 6.0 で導入されました。
[explicit] QMetaType::QMetaType(int typeId)
型typeId に関するすべての情報を含むQMetaTypeオブジェクトを作成します。
[constexpr, since 6.0] qsizetype QMetaType::alignOf() const
その型のアライメントをバイト単位で返します(つまり、alignof(T) です。ここで、T は、この `QMetaType ` インスタンスが構築された実際の型です)。
この関数は通常、construct() と組み合わせて、型が使用するメモリの低レベルな管理を行うために使用されます。
この関数は Qt 6.0 で導入されました。
QMetaType::construct() およびQMetaType::sizeOf()も参照してください 。
[static] bool QMetaType::canConvert(QMetaType fromType, QMetaType toType)
QMetaType::convert がfromType からtoType への変換を行える場合、true を返します。なお、これは主に変換を実行できるかどうかを示すものであり、実際に変換を試みた際に失敗する場合があることに注意してください(例えば、浮動小数点値をその範囲外の整数に変換しようとした場合など)。
registerConverter() 関数を使用すると、組み込み型と非組み込み型の間の変換、あるいは2つの非組み込み型間の変換など、追加の変換を登録することができます。この関数は、変換パスが登録されている場合にtrue を返します。
Qtでは、以下の変換がサポートされています:
その他、サポートされている変換には、すべてのプリミティブ型間(int 、float 、bool など、すべての列挙型を含む)および任意のポインタ型とstd::nullptr_t 間の変換が含まれます。また、列挙型はQString およびQByteArray に変換することもできます。
fromType とtoType の両方がQObject から派生した型(またはそれらへのポインタ)である場合、一方の型が他方から派生しているときは、この関数はtrue を返します。つまり、fromType で記述された型からtoType で記述された型へのstatic_cast<> がコンパイル可能であれば、true を返します。convert() 関数はqobject_cast() と同様に動作し、QVariant が指すオブジェクトの動的型を検証します。
toType がQVariantList である場合、シーケンシャルコンテナからの型変換でも、この関数に対してtrueが返されます。
同様に、連想コンテナからのキャストも、toType がQVariantHash またはQVariantMap である場合、この関数に対してtrueを返します。
convert()、QMetaSequence::Iterable 、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()、QMetaAssociation::Iterable 、およびQ_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()も参照してください 。
[static] bool QMetaType::canView(QMetaType fromType, QMetaType toType)
QMetaType::view が、型fromType に対して型toType の可変ビューを作成できる場合、true を返します。
QObject から派生した型のポインタ間の変換において、fromType で記述された型からtoType で記述された型へのqobject_cast が成功する場合、この関数は true を返します。
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE() に登録された任意のコンテナに対して、QMetaSequence::Iterable 型の可変ビューを作成することができます。
同様に、Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE() で登録された任意のコンテナに対して、QMetaAssociation::Iterable 型の可変ビューを作成できます。
convert()、QMetaSequence::Iterable 、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()、QMetaAssociation::Iterable 、およびQ_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()も参照してください 。
[since 6.0] QPartialOrdering QMetaType::compare(const void *lhs, const void *rhs) const
lhs およびrhs にあるオブジェクトを、順序付けのために比較します。
比較がサポートされていない場合、または値に順序がない場合は、QPartialOrdering::Unordered を返します。それ以外の場合、lhs がrhs より小さい、等しい、大きい場合、それぞれQPartialOrdering::Less 、QPartialOrdering::Equivalent 、QPartialOrdering::Greater を返します。
両方のオブジェクトは、このメタタイプで記述された型でなければなりません。lhs またはrhs のいずれかがnullptr の場合、値は順序付けられていません。比較は、その型の「より小さい」演算子がメタタイプ宣言から可視であった場合にのみサポートされます。
その型の等価演算子も可視であった場合、値が等しいとみなされるのは、等価演算子がそう定めている場合に限られる。 等価演算子が存在しない場合、いずれの値も他方より小さくないときは、それらの値は等しいとみなされます。等価演算子が利用可能であり、そのような2つの値が等しくない場合、それらは順序付けられていないとみなされます。これは、浮動小数点型のNaN(Not a Number)値がその順序付けの範囲外にあるのと同じです。
注: メタ型宣言に対して「より小さい」演算子が可視でなかった場合 、その宣言に対して可視な等価演算子が両値を等しいとみなしても、値は順序付けられていないものとみなされます。つまり、compare() == 0 は、「より小さい」演算子が可視であった場合にのみ、equals()と一致します。
この関数は Qt 6.0 で導入されました。
equals() およびisOrdered()も参照してください 。
void *QMetaType::construct(void *where, const void *copy = nullptr) const
where が指す既存のメモリ領域(copy のコピー)に、この `QMetaType ` インスタンスが構築された型に対応する値を構築し、where を返します。copy が 0 の場合、値はデフォルト構築されます。
これは、型を格納するために使用されるメモリを明示的に管理するための低レベルの関数です。このレベルの制御が必要ない場合は、create() の呼び出しを検討してください(つまり、「placement new」ではなく「new」を使用してください)。
where が新しい値を格納できる場所を指していること、およびwhere が適切にアラインメントされていることを確認する必要があります。型のサイズは、sizeOf()を呼び出すことで照会できます。
アライメントに関する経験則として、型はその「自然な境界」にアラインされる。これは、その型よりも大きい最小の2の冪であるが、そのアライメントがプラットフォームの最大有効アライメントよりも大きくなる場合はこの限りではない。 実用上、2 * sizeof(void*) を超えるアライメントが必要となるのは、特殊なハードウェア命令(例:x86 におけるアライメントされた SSE ロードおよびストア)の場合に限られます。
[static] bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, void *to)
from にあるオブジェクトを、fromType から、to にある、型がtoType の事前割り当て済み領域に変換します。変換が成功した場合はtrue を返し、失敗した場合は false を返します。
from とto の両方が有効なポインタでなければなりません。
void *QMetaType::create(const void *copy = nullptr) const
copy のコピーを返します。ただし、その が、このQMetaType インスタンスが作成された目的の型である場合に限ります。copy がnullptr である場合、デフォルトコンストラクタでインスタンスを作成します。
QMetaType::destroy()も参照してください 。
bool QMetaType::debugStream(QDebug &dbg, const void *rhs)
rhs にあるオブジェクトを、デバッグストリームdbg へストリーム送信します。成功した場合はtrue を返し、そうでない場合は false を返します。
void QMetaType::destroy(void *data) const
data を破棄します。ただし、それがこのQMetaType インスタンスが作成された対象のタイプである場合に限ります。
QMetaType::create()も参照してください 。
void QMetaType::destruct(void *data) const
data にある値を、このQMetaType インスタンスが構築された際の型であると仮定して破棄します。
destroy() とは異なり、この関数はその型のデストラクタのみを呼び出し、delete 演算子は呼び出しません。
QMetaType::construct()も参照してください 。
[since 6.0] bool QMetaType::equals(const void *lhs, const void *rhs) const
lhs およびrhs にあるオブジェクトを、等価性について比較します。
両方のオブジェクトは、このメタタイプで記述された型でなければなりません。その型に対する「より小さい」または「等しい」演算子がメタタイプ宣言から可視であった場合にのみ、2つのオブジェクトを比較できます。そうでない場合、メタタイプは決して値を等しいとは見なしません。 等価演算子がメタタイプ宣言から可視であった場合、その演算子が基準となります。そうでない場合、小なり演算子が可視であり、かつどちらの値も他方より小さくないときは、2つの値は等しいとみなされます。値が順序付けられていない場合(詳細についてはcompare() を参照)、それらは等しくありません。
2つのオブジェクトが等しい場合はtrueを返し、そうでない場合はfalseを返します。
この関数は Qt 6.0 で導入されました。
isEqualityComparable() およびcompare()も参照してください 。
[constexpr] QMetaType::TypeFlags QMetaType::flags() const
このQMetaType インスタンスが構築された型のフラグを返します。特定の型の特性を確認するには、フラグを直接参照するのではなく、「is-」関数のいずれかを使用することをお勧めします。
関連項目: QMetaType::TypeFlags 、isDefaultConstructible()、isCopyConstructible()、isMoveConstructible()、isDestructible()、isEqualityComparable()、およびisOrdered()。
[static] QMetaType QMetaType::fromName(QByteArrayView typeName)
typeName に一致する `QMetaType ` を返します。`typeName` が ` ` に認識されていない場合、返されるオブジェクトは無効となります。QMetaType
[static constexpr] template <typename T> QMetaType QMetaType::fromType()
テンプレートパラメータで指定された型に対応するQMetaType を返します。
[static] bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)
メタ型システムに、メタ型 ID `fromType ` から `true` への変換が登録されている場合、` ` を返します。toType
[static] template <typename From, typename To> bool QMetaType::hasRegisteredConverterFunction()
メタ型システムに、型 From から型 To への変換が登録されている場合、true を返します。
これはオーバーロードされた関数です。
[since 6.1] bool QMetaType::hasRegisteredDataStreamOperators() const
メタ型システムがこのメタ型に対してデータストリーム演算子を登録している場合、true を返します。
この関数は Qt 6.1 で導入されました。
[since 6.0] bool QMetaType::hasRegisteredDebugStreamOperator() const
メタ型システムに、このメタ型に対して登録済みのデバッグストリーム演算子が存在する場合、true を返します。
この関数は Qt 6.0 で導入されました。
[static] bool QMetaType::hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)
メタ型システムに、メタ型 IDtoType を持つメタ型 IDfromType に対する可変ビューが登録されている場合、true を返します。
[static, since 6.0] template <typename From, typename To> bool QMetaType::hasRegisteredMutableViewFunction()
メタ型システムに、型 `To` の型 `From` に対する登録済みの可変ビューが存在する場合、true を返します。
これはオーバーロードされた関数です。
この関数は Qt 6.0 で導入されました。
int QMetaType::id() const
このQMetaType インスタンスが保持するIDの型を返します。
[noexcept, since 6.5] bool QMetaType::isCopyConstructible() const
この型がコピーコンストラクタで生成できる場合、true を返します。生成できる場合、construct() およびcreate() は、null ではないcopy パラメータとともに使用できます。
この関数は Qt 6.5 で導入されました。
flags()、isDefaultConstructible()、isMoveConstructible()、およびisDestructible()も参照してください 。
[noexcept, since 6.5] bool QMetaType::isDefaultConstructible() const
この型がデフォルトコンストラクタで生成可能であれば、trueを返します。生成可能な場合、construct() およびcreate() は、copy パラメータとして null を指定して使用できます。
この関数は Qt 6.5 で導入されました。
flags()、isCopyConstructible()、isMoveConstructible()、およびisDestructible()も参照してください 。
[noexcept, since 6.5] bool QMetaType::isDestructible() const
この型が破棄可能であれば、true を返します。破棄可能な場合、destroy() およびdestruct() を呼び出すことができます。
この関数は Qt 6.5 で導入されました。
flags()、isDefaultConstructible()、isCopyConstructible()、およびisMoveConstructible()も参照してください 。
bool QMetaType::isEqualityComparable() const
このメタタイプで記述された型に対する「以下」演算子が、メタタイプ宣言から可視であった場合は `true ` を返し、そうでない場合は `false` を返します。
equals() およびisOrdered()も参照してください 。
[noexcept, since 6.5] bool QMetaType::isMoveConstructible() const
この型が移動コンストラクタで生成できる場合、true を返します。QMetaType では現在、このトレイトを利用する API が用意されていません。
この関数は Qt 6.5 で導入されました。
flags()、isDefaultConstructible()、isCopyConstructible()、およびisDestructible()も参照してください 。
bool QMetaType::isOrdered() const
このメタタイプで記述された型に対する「より小さい」演算子が、メタタイプ宣言から可視であった場合は `true ` を返し、そうでない場合は `false` を返します。
compare() およびisEqualityComparable()も参照してください 。
[noexcept] bool QMetaType::isRegistered() const
このQMetaType オブジェクトが Qt のグローバルメタタイプレジストリに登録されている場合、true を返します。登録を行うと、その型を名前(QMetaType::fromName() を使用)または ID(コンストラクタを使用)で検索できるようになります。
qRegisterMetaType() およびisValid()も参照してください 。
[static] bool QMetaType::isRegistered(int type)
IDがtype のデータ型が登録されている場合はtrue を返し、そうでない場合はfalse を返します。
[constexpr noexcept] bool QMetaType::isValid() const
このQMetaType オブジェクトが型に関する有効な情報を含んでいる場合は `true ` を返し、そうでない場合は `false` を返します。
isRegistered()も参照してください 。
bool QMetaType::load(QDataStream &stream, void *data) const
指定されたstream からこの型のオブジェクトを読み込み、data に格納します。オブジェクトの読み込みに成功した場合はtrue を返し、失敗した場合はfalse を返します。
通常、この関数を直接呼び出す必要はありません。代わりに、QVariant のoperator>>() を使用してください。これは、カスタム型の読み込みにload()を利用しています。
save()も参照してください 。
[constexpr] const QMetaObject *QMetaType::metaObject() const
この型に対するQMetaObject を返します。
型がQObject のサブクラスへのポインタ型である場合、flags()はQMetaType::PointerToQObject を含み、この関数は対応するQMetaObject を返します。これはQMetaObject::newInstance()と組み合わせて、この型のQObjectを作成するために使用できます。
型がQ_GADGET である場合、flags()にはQMetaType::IsGadget が含まれます。型がQ_GADGET へのポインタである場合、flags()にはQMetaType::PointerToGadget が含まれます。いずれの場合も、この関数はそのQMetaObject を返します。これを使用して、QMetaMethod やQMetaProperty を取得し、例えばQVariant::data()で示されるように、この型のポインタに対してそれらを適用することができます。
型が列挙型の場合、flags() はQMetaType::IsEnumeration を返します。この場合、この関数は、列挙型がQ_ENUM として登録されていた場合はその外側のオブジェクトのQMetaObject を返し、そうでない場合はnullptr を返します。
QMetaType::flags()も参照してください 。
[constexpr] const char *QMetaType::name() const
このQMetaType に関連付けられた型名を返します。一致する型が見つからない場合は、nullポインタを返します。返されたポインタをdeleteしてはなりません。
typeName()も参照してください 。
[static] template <typename From, typename To> bool QMetaType::registerConverter()
メタ型システムにおいて、型 From から型 To への暗黙の型変換の可能性を登録します。登録に成功した場合は `true ` を返し、失敗した場合は `false` を返します。
class Counter {
int number = 0;
public:
int value() const { return number; }
operator int() const { return value(); }
void increment() {++number;}
};
QMetaType::registerConverter<Counter, int>();[static] template <typename From, typename To> bool QMetaType::registerConverter(To (From::*function)() const)
メタ型システムにおいて、型 From から型 To への変換子として、function のようなメソッド(To From::function() const)を登録します。登録に成功した場合は `true ` を返し、失敗した場合は `false` を返します。
struct Coordinates {
int x;
int y;
int z;
QString toString() const { return u"[x: %1; y: %2, z: %3]"_s.arg(QString::number(x),
QString::number(y),
QString::number(z)); }
};
QMetaType::registerConverter<Coordinates, QString>(&Coordinates::toString);これはオーバーロードされた関数です。
[static] template <typename From, typename To> bool QMetaType::registerConverter(To (From::*function)(bool *) const)
メタ型システムにおいて、型 From から型 To へのコンバータとして、function のようなメソッド(To From::function(bool *ok) const)を登録します。登録に成功した場合は `true ` を返し、失敗した場合は `false` を返します。
ok ポインタは、変換が成功したかどうかを示すために、関数内で使用できます。
struct BigNumber {
long long l;
int toInt(bool *ok = nullptr) const {
const bool canConvertSafely = l < std::numeric_limits<int>::max();
if (ok)
*ok = canConvertSafely;
return l;
}
};
QMetaType::registerConverter<BigNumber, int>(&BigNumber::toInt);これはオーバーロードされた関数です。
[static] template <
typename From,
typename To,
typename UnaryFunction
>
bool QMetaType::registerConverter(UnaryFunction function)
単項関数オブジェクト `function ` を、メタ型システムにおいて型 `From` から型 `To` へのコンバータとして登録します。登録に成功した場合は `true ` を返し、失敗した場合は `false` を返します。
function From 型のインスタンスを受け取り、 型のインスタンスを返す必要があります。関数ポインタ、ラムダ、またはファンクタオブジェクトのいずれでも構いません。Qt 6.5以降、 は変換の失敗を示すために、 型のインスタンスを返すことも可能になりました。To function std::optional<To>
QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) {
return QString::fromUtf8(str.data());
});
QMetaType::registerConverter<QJsonValue, CustomPointType>(
[](const QJsonValue &value) -> std::optional<CustomPointType> {
const auto object = value.toObject();
if (!object.contains("x") || !object.contains("y"))
return std::nullopt; // The conversion fails if the required properties are missing
return CustomPointType{object["x"].toDouble(), object["y"].toDouble()};
});これはオーバーロードされた関数です。
[static, since 6.0] template <typename From, typename To> bool QMetaType::registerMutableView(To (From::*function)())
メタ型システムにおいて、型 `From ` に対して、型 `To ` の可変ビューとして `To From::function() ` のようなメソッド `function ` を登録します。登録に成功した場合は `true ` を返し、失敗した場合は `false` を返します。
これはオーバーロードされた関数です。
この関数は Qt 6.0 で導入されました。
[static, since 6.0] template <
typename From,
typename To,
typename UnaryFunction
>
bool QMetaType::registerMutableView(UnaryFunction function)
単項関数オブジェクト `function ` を、メタ型システムにおいて型 `From` 上の型 `To` の可変ビューとして登録します。登録に成功した場合は `true ` を返し、失敗した場合は `false` を返します。
これはオーバーロードされた関数です。
この関数は Qt 6.0 で導入されました。
[since 6.5] void QMetaType::registerType() const
QMetaType::fromName() を使用して、この `QMetaType ` を型レジストリに登録し、名前で検索できるようにします。
この関数は Qt 6.5 で導入されました。
qRegisterMetaType()も参照してください 。
bool QMetaType::save(QDataStream &stream, const void *data) const
data が指すオブジェクトを、指定されたstream に書き込みます。オブジェクトが正常に保存された場合はtrue を返し、そうでない場合はfalse を返します。
通常、この関数を直接呼び出す必要はありません。代わりに、QVariant のoperator<<() を使用してください。これは、カスタム型のストリーム書き込みにsave()を利用しています。
load()も参照してください 。
[constexpr] qsizetype QMetaType::sizeOf() const
その型のサイズをバイト単位で返します(つまり、sizeof(T)に相当します。ここで、T はこの `QMetaType ` インスタンスが構築された実際の型です)。
この関数は通常、construct() と組み合わせて使用され、型が使用するメモリの低レベルな管理を行います。
QMetaType::construct() およびQMetaType::alignOf()も参照してください 。
[since 6.6] QMetaType QMetaType::underlyingType() const
このメタタイプが列挙型を表す場合、このメソッドは、その列挙型の基底型と同じ符号とサイズを持つ数値クラスのメタタイプを返します。QFlags 型を表す場合は、QMetaType::Int を返します。それ以外の場合は、無効なQMetaType が返されます。
この関数は Qt 6.6 で導入されました。
[static, since 6.0] bool QMetaType::view(QMetaType fromType, void *from, QMetaType toType, void *to)
from to にある 型の事前割り当て済み領域内の、 にあるオブジェクトに対する可変ビューを作成します。変換が成功した場合は を返し、そうでない場合は false を返します。toType fromType true
この関数は Qt 6.0 で導入されました。
関連する非メンバー関数
[since 6.4] size_t qHash(QMetaType key, size_t seed = 0)
key のハッシュ値を、seed を計算のシードとして使用して返します。
この関数は Qt 6.4 で導入されました。
[constexpr] template <typename T> int qMetaTypeId()
コンパイル時に、型T のメタ型IDを返します。この型がQ_DECLARE_METATYPE()で宣言されていない場合、コンパイルは失敗します。
一般的な使用例:
int id = qMetaTypeId<QString>(); // id is now QMetaType::QString
id = qMetaTypeId<MyStruct>(); // compile error if MyStruct not declaredQMetaType::type() は qMetaTypeId() と同じ ID を返しますが、実行時に型の名前に基づいて検索を行います。QMetaType::type() は若干処理が遅くなりますが、型が登録されていない場合でもコンパイルは成功します。
Q_DECLARE_METATYPE() およびQMetaType::type()も参照してください 。
[constexpr] template <typename T> int qRegisterMetaType()
この関数を呼び出すと、型T が登録されます。メタ型のIDを返します。
例:
int id = qRegisterMetaType<MyStruct>();この関数を呼び出す時点において、T が完全に定義された型であることが必要です。ポインタ型の場合、そのポインタが指す型も完全に定義されている必要があります。前方宣言された型へのポインタを登録するには、Q_DECLARE_OPAQUE_POINTER() を使用してください。
QMetaType 、QVariant 、またはQObject::property() APIでT 型を使用する場合、登録は必要ありません。
キュー化されたシグナルおよびスロット接続で型 `T ` を使用するには、最初の接続が確立される前に `qRegisterMetaType<T>() ` を呼び出す必要があります。これは通常、`T` を使用するクラスのコンストラクタ内、または `main() ` 関数内で実行されます。
型が登録されると、QMetaType::fromName() を使用してその名前で検索できるようになります。
Q_DECLARE_METATYPE()も参照してください 。
[since 6.5] int qRegisterMetaType(QMetaType meta)
メタ型「meta 」を登録し、その型IDを返します。
キュー化されたシグナルおよびスロット接続でメタ型meta を持つ型を使用するには、最初の接続が確立される前にqRegisterMetaType(meta) を呼び出す必要があります。これは通常、そのメタ型を使用するクラスのコンストラクタ内、またはmain() 関数内で行われます。
型が登録されると、QMetaType::fromName() を使用してその名前で検索できるようになります。
この関数は Qt 6.5 で導入されました。
[noexcept] bool operator!=(const QMetaType &lhs, const QMetaType &rhs)
QMetaType lhs がQMetaType rhs とは異なる型を表す場合は、true を返します。それ以外の場合は、false を返します。
[since 6.5] QDebug operator<<(QDebug d, QMetaType m)
QMetaType `m ` をストリーム `d` に書き込み、そのストリームを返します。
この関数は Qt 6.5 で導入されました。
[noexcept] bool operator==(const QMetaType &lhs, const QMetaType &rhs)
QMetaType lhs がQMetaType rhs と同じ型を表す場合は、true を返し、そうでない場合はfalse を返します。
マクロのドキュメント
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)
このマクロは、コンテナ `Container ` を `QMetaType ` に対して連想コンテナとして認識させます。これにより、`T` および `U` が `QMetaType` によって認識されている場合、`Container<T, U>` のインスタンスを `QVariant` に格納することが可能になります。
なお、Qtの連想コンテナはすべてすでに組み込みのサポートを備えており、これらに対しては本マクロを使用する必要はありません。std::mapコンテナも同様に組み込みのサポートを備えています。
この例は、Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE() の典型的な使用法を示しています:
#include <unordered_map>
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map)
void someFunction()
{
std::unordered_map<int, bool> container;
QVariant var = QVariant::fromValue(container);
// ...
}Q_DECLARE_METATYPE(Type)
このマクロは、Type 型がパブリックのデフォルトコンストラクタ、パブリックのコピーコンストラクタ、およびパブリックのデストラクタを提供している限り、QMetaType に対してその型を認識させます。これは、QVariant においてType 型をカスタム型として使用するために必要です。
このマクロを使用するには、Type が使用される時点で完全に定義済みの型である必要があります。ポインタ型の場合、そのポインタが指す型も完全に定義されている必要があります。前方宣言された型へのポインタを登録するには、Q_DECLARE_OPAQUE_POINTER() と組み合わせて使用してください。
理想的には、このマクロはクラスまたは構造体の宣言の下に配置すべきです。それが不可能な場合は、その型がQVariant で使用されるたびにインクルードされる必要があるプライベートヘッダーファイルに記述することもできます。
Q_DECLARE_METATYPE() を追加すると、QVariant を含むすべてのテンプレートベースの関数に対してその型が認識されるようになります。なお、キュー化されたシグナルとスロットの接続や、QObject のプロパティシステムでその型を使用する場合は、名前が実行時に解決されるため、qRegisterMetaType() も呼び出す必要があることに注意してください。
この例は、Q_DECLARE_METATYPE() の典型的な使用例を示しています:
struct MyStruct
{
int i;
//...
};
Q_DECLARE_METATYPE(MyStruct)MyStruct が名前空間内にある場合、Q_DECLARE_METATYPE()マクロは名前空間の外に記述する必要があります:
namespace MyNamespace
{
struct MyStruct
{
//...
};
}
Q_DECLARE_METATYPE(MyNamespace::MyStruct)MyStruct がQMetaType に認識されるようになったため、QVariant 内で使用できるようになります:
MyStruct s;
QVariant var;
var.setValue(s); // copy s into the variant
//...
// retrieve the value
MyStruct s2 = var.value<MyStruct>();一部の型は自動的に登録されるため、このマクロは必要ありません:
- <T> から派生したクラスへのポインタQObject
- QList<T>、QQueue<T>、QStack<T>、またはQSet<T> から派生したクラスへのポインタ(ここで T は登録済みのメタ型
- QHash<T1, T2>、QMap<T1, T2>、または std::pair<T1, T2>(ここで T1 および T2 は登録済みメタ型)
- QPointer<T>、QSharedPointer<T>、QWeakPointer<T>。ここで、T はQObject
- Q_ENUM で登録された列挙型、またはQ_FLAG
- Q_GADGET マクロを持つクラス
注:この メソッドは、登録時に可視である場合、その型のストリーム演算子およびデバッグ演算子も登録します。 これは一部の場所では自動的に行われるため、型のストリーム演算子は、その型自体の直後に宣言することを強く推奨します。また、C++ の引数依存の検索規則のため、演算子は型自体と同じ名前空間で宣言することを強く推奨します。
ストリーム演算子のシグネチャは、以下のようになる必要があります。
QDataStream &operator<<(QDataStream &out, const MyClass &myObj);
QDataStream &operator>>(QDataStream &in, MyClass &myObj);関連項目: qRegisterMetaType()。
Q_DECLARE_OPAQUE_POINTER(PointerType)
このマクロを使用すると、前宣言された型(PointerType )へのポインタを、Q_DECLARE_METATYPE() またはqRegisterMetaType() を使用してQMetaType に登録できるようになります。
プログラム内の他の文脈で、ポインタの先頭型が完全な型として使用されている場合、mocによる不完全なプロパティ型に関する警告やエラーを回避するためにこのマクロを使用しないでください。型の完全な定義が利用可能であるが、コンパイル時間を短縮するためにヘッダーでの前方宣言を好む場合は、代わりに `Q_MOC_INCLUDE ` を使用してください。
警告: Q_OBJECT またはガジェットクラスへのポインタに対して Q_DECLARE_OPAQUE_POINTERを使用しないでください 。メタ型システムに一貫性のない情報が混入するリスクがあります。
Q_DECLARE_METATYPE() およびqRegisterMetaType()も参照してください 。
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)
このマクロは、コンテナ `Container ` を `QMetaType ` に対してシーケンシャルコンテナとして認識させます。これにより、`T` 自体が `QMetaType` によって認識されている場合、`Container<T>` のインスタンスを `QVariant` に格納することが可能になります。
なお、Qtのすべての逐次コンテナにはすでに組み込みのサポートが用意されており、これらに対しては本マクロを使用する必要はありません。std::vectorおよびstd::listコンテナにも組み込みのサポートがあります。
この例は、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE() の典型的な使用法を示しています。
#include <deque>
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(std::deque)
void someFunc()
{
std::deque<QFile*> container;
QVariant var = QVariant::fromValue(container);
// ...
}Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer)
このマクロは、スマートポインタ `SmartPointer ` を `QMetaType ` に対してスマートポインタとして認識させます。これにより、T が `QObject` を継承する型である場合、`SmartPointer<T>` のインスタンスを `QVariant` に格納できるようになります。
なお、QWeakPointer 、QSharedPointer 、およびQPointer にはすでに組み込みのサポートが用意されているため、これらに対しては本マクロを使用する必要はありません。
この例は、Q_DECLARE_SMART_POINTER_METATYPE() の典型的な使用法を示しています:
#include <memory>
Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)
voidsomeMethod()
{
autosmart_ptr=std::make_shared<QFile>();
QVariant var=QVariant::fromValue(smart_ptr);
// ...
if(var.canConvert<QObject*>()) {
QObject*sp =var.value<QObject*>();
qDebug() << sp->metaObject()->className(); // Prints 'QFile'.
}
}© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.