QMetaType Class

QMetaTypeクラスは、メタ・オブジェクト・システムの名前付き型を管理します。詳細...

Header: #include <QMetaType>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

このクラスは等価比較可能です。

注意:このクラスの関数はすべてスレッドセーフです。

パブリック型

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::*)() const function)
bool registerConverter(To (From::*)(bool *) const function)
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 type, 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)

マクロ

詳細説明

このクラスは、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::Void43void
QMetaType::Bool1bool
QMetaType::Int2int
QMetaType::UInt3unsigned int
QMetaType::Double6double
QMetaType::QChar7QChar
QMetaType::QString10QString
QMetaType::QByteArray12QByteArray
QMetaType::Nullptr51std::nullptr_t
QMetaType::VoidStar31void *
QMetaType::Long32long
QMetaType::LongLong4LongLong
QMetaType::Short33short
QMetaType::Char34char
QMetaType::Char1656char16_t
QMetaType::Char3257char32_t
QMetaType::ULong35unsigned long
QMetaType::ULongLong5ULongLong
QMetaType::UShort36unsigned short
QMetaType::SChar40signed char
QMetaType::UChar37unsigned char
QMetaType::Float38float
QMetaType::Float1663qfloat16
QMetaType::QObjectStar39QObject *
QMetaType::QCursor0x100aQカーソル
QMetaType::QDate14QDate
QMetaType::QSize21Qサイズ
QMetaType::QTime15QTime
QMetaType::QVariantList9Qバリアントリスト
QMetaType::QPolygon0x1007Qポリゴン
QMetaType::QPolygonF0x1016QPolygonF
QMetaType::QColor0x1003QColor
QMetaType::QColorSpace0x1017QColorSpace (Qt 5.15 で導入)
QMetaType::QSizeF22QSizeF
QMetaType::QRectF20QRectF
QMetaType::QLine23QLine
QMetaType::QTextLength0x100dQTextLength
QMetaType::QStringList11QStringList
QMetaType::QVariantMap8QVariantMap
QMetaType::QVariantHash28QVariantHash
QMetaType::QVariantPair58QVariantPair
QMetaType::QIcon0x1005QIcon
QMetaType::QPen0x100cQペン
QMetaType::QLineF24QLineF
QMetaType::QTextFormat0x100eQTextFormat
QMetaType::QRect19QRect
QMetaType::QPoint25Qポイント
QMetaType::QUrl17QUrl
QMetaType::QRegularExpression44QRegularExpression
QMetaType::QDateTime16QDateTime
QMetaType::QPointF26QPointF
QMetaType::QPalette0x1004QPalette
QMetaType::QFont0x1000Qフォント
QMetaType::QBrush0x1002QBrush
QMetaType::QRegion0x1008QRegion
QMetaType::QBitArray13QBit配列
QMetaType::QImage0x1006Q画像
QMetaType::QKeySequence0x100bQキーシーケンス
QMetaType::QSizePolicy0x2000Qサイズポリシー
QMetaType::QPixmap0x1001QPixmap
QMetaType::QLocale18Qロケール
QMetaType::QBitmap0x1009QBitmap
QMetaType::QTransform0x1010QTransform
QMetaType::QMatrix4x40x1011QMatrix4x4
QMetaType::QVector2D0x1012QVector2D
QMetaType::QVector3D0x1013QVector3D
QMetaType::QVector4D0x1014QVector4D
QMetaType::QQuaternion0x1015QQuaternion
QMetaType::QEasingCurve29Qイージングカーブ
QMetaType::QJsonValue45QJsonValue
QMetaType::QJsonObject46QJsonObject
QMetaType::QJsonArray47QJsonArray
QMetaType::QJsonDocument48QJsonDocument
QMetaType::QCborValue53QCbor値
QMetaType::QCborArray54QCbor配列
QMetaType::QCborMap55QCborMap
QMetaType::QCborSimpleType52QCborSimpleType
QMetaType::QModelIndex42QModelIndex
QMetaType::QPersistentModelIndex50QPersistentModelIndex (Qt 5.5 で導入)
QMetaType::QUuid30QUid
QMetaType::QByteArrayList49QByteArrayList
QMetaType::QVariant41QVariant
QMetaType::User65536ユーザー型のベース値
QMetaType::UnknownType0これは無効な型IDです。これは、登録されていない型に対してQMetaType から返される。

追加の型は、qRegisterMetaType ()を使用するか、registerType ()を呼び出すことで登録できます。

type() およびtypeName()も参照

enum QMetaType::TypeFlag
flags QMetaType::TypeFlags.

この列挙型は、QMetaType でサポートされる型の属性を記述します。

定数説明
QMetaType::NeedsConstruction0x1この型はデフォルトのコンストラクタを持ちます。このフラグが設定されていない場合、インスタンスは memset で安全に 0 に初期化できます。
QMetaType::NeedsCopyConstruction0x4000(6.5以降) この型は自明でないコピーコンストラクタを持ちます。フラグが設定されていない場合、インスタンスは memcpy でコピーできます。
QMetaType::NeedsMoveConstruction0x8000(6.5以降)この型は自明でない移動コンストラクタを持ちます。フラグが設定されていない場合、memcpyでインスタンスを移動できる。
QMetaType::NeedsDestruction0x2この型は自明でないデストラクタを持つ。フラグが設定されていない場合、オブジェクトを破棄する前にデストラクタを呼び出す必要はない。
QMetaType::RelocatableType0x4この属性を持つ型のインスタンスは、memcpyを使用して安全に別のメモリ位置に移動できる。
QMetaType::IsEnumeration0x10この型は列挙型である。
QMetaType::IsUnsignedEnumeration0x100型が列挙型の場合、その基礎となる型は符号なしである。
QMetaType::PointerToQObject0x8この型は、QObject から派生したクラスへのポインタです。
QMetaType::IsPointer0x800この型は別の型へのポインタです。
QMetaType::IsConst0x2000この型の値が不変であることを示す。例えば、const オブジェクトへのポインタであるため。

注意: Qt 6.5以前では、コピーのコンストラクタやデストラクタがトリビアルでない場合(つまり、型がトリビアルでない場合)、NeedsConstructionフラグとNeedsDestructionフラグの両方が誤って設定されていました。

Needsフラグが設定されていても、メタ型が該当する型の一般にアクセス可能なコンストラクタや一般にアクセス可能なデストラクタを持っていない場合があることに注意。

TypeFlags型はQFlags<TypeFlag>のtypedefである。TypeFlag値のORの組み合わせを格納する。

メンバ関数の説明

[constexpr noexcept, 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::convertfromType からtoType に変換できる場合、true を返します。

Qtでは以下の変換がサポートされています:

タイプに自動的にキャストします。
QMetaType::BoolQMetaType::QChar QMetaType::Double, , , , 、QMetaType::Int QMetaType::LongLong QMetaType::QString QMetaType::UInt QMetaType::ULongLong
QMetaType::QByteArrayQMetaType::Double QMetaType::Int, , , , 、QMetaType::LongLong QMetaType::QString QMetaType::UInt QMetaType::ULongLong QMetaType::QUuid
QMetaType::QCharQMetaType::Bool QMetaType::Int, , 、QMetaType::UInt QMetaType::LongLong QMetaType::ULongLong
QMetaType::QColorQMetaType::QString
QMetaType::QDateQMetaType::QDateTime,QMetaType::QString
QMetaType::QDateTimeQMetaType::QDate,QMetaType::QStringQMetaType::QTime
QMetaType::DoubleQMetaType::Bool QMetaType::Int, , , 、QMetaType::LongLong QMetaType::QString QMetaType::UInt QMetaType::ULongLong
QMetaType::QFontQMetaType::QString
QMetaType::IntQMetaType::Bool QMetaType::QChar, , , , 、QMetaType::Double QMetaType::LongLong QMetaType::QString QMetaType::UInt QMetaType::ULongLong
QMetaType::QKeySequenceQMetaType::Int,QMetaType::QString
QMetaType::QVariantListQMetaType::QStringList (リストの項目をQStringsに変換できる場合)
QMetaType::LongLongQMetaType::Bool QMetaType::QByteArray, , , , , 、QMetaType::QChar QMetaType::Double QMetaType::Int QMetaType::QString QMetaType::UInt QMetaType::ULongLong
QMetaType::QPointQMetaType::QPointF
QMetaType::QRectQMetaType::QRectF
QMetaType::QStringQMetaType::Bool QMetaType::QByteArray, , , , , , , , , , , , , 、QMetaType::QChar QMetaType::QColor QMetaType::QDate QMetaType::QDateTime QMetaType::Double QMetaType::QFont QMetaType::Int QMetaType::QKeySequence QMetaType::LongLong QMetaType::QStringList QMetaType::QTime QMetaType::UInt QMetaType::ULongLong QMetaType::QUuid
QMetaType::QStringListQMetaType::QVariantList,QMetaType::QString (リストに正確に1つの項目が含まれている場合)
QMetaType::QTimeQMetaType::QString
QMetaType::UIntQMetaType::Bool,QMetaType::QChar,QMetaType::Double,QMetaType::Int,QMetaType::LongLong,QMetaType::QStringQMetaType::ULongLong
QMetaType::ULongLongQMetaType::Bool QMetaType::QChar, , , , 、QMetaType::Double QMetaType::Int QMetaType::LongLong QMetaType::QString QMetaType::UInt
QMetaType::QUuidQMetaType::QByteArray,QMetaType::QString

プリミティブ型(int、float、boolなど)間のキャストがサポートされています。

fromType で記述された型からtoType で記述された型へのqobject_cast が成功する場合、QObject から派生した型のポインタ間の変換もこの関数で真を返します。

シーケンシャルコンテナからのキャストも、toTypeQVariantList である場合、この関数は真を返す。

同様に、連想コンテナからのキャストも、toTypeQVariantHash またはQVariantMap の場合、この関数に対して真を返します。

convert()、QSequentialIterableQ_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()、QAssociativeIterableQ_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()も参照

[static] bool QMetaType::canView(QMetaType fromType, QMetaType toType)

QMetaType::viewtoType 型のミュータブル・ビューをfromType 型上に作成できる場合、true を返す。

QObject から派生した型のポインタ間の変換は、fromType で記述された型からtoType で記述された型へのqobject_cast が成功する場合、この関数は真を返す。

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE ()で登録された任意のコンテナ上に、QSequentialIterable 型のミュータブル・ビューを作成することができる。

同様に、Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()で登録されたコンテナ上にも、QAssociativeIterable 型の変更可能なビューを作成できる。

convert()、QSequentialIterableQ_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()、QAssociativeIterableQ_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()も参照のこと

[since 6.0] QPartialOrdering QMetaType::compare(const void *lhs, const void *rhs) const

lhsrhs のオブジェクトの順序を比較する。

比較がサポートされていないか、値が順序付けされていない場合はQPartialOrdering::Unordered を返す。そうでない場合、lhsrhs よりも小さい、等しい、または大きい場合は、それぞれQPartialOrdering::LessQPartialOrdering::Equivalent 、またはQPartialOrdering::Greater を返す。

どちらのオブジェクトも、このメタタイプで記述された型でなければならない。lhs またはrhs のいずれかがnullptr の場合、値は順序なしとなる。比較は、型の less than 演算子がメタタイプ宣言で可視であった場合にのみサポートされます。

型の等号演算子も表示されていた場合、値は等号演算子が等号であると言う場合にのみ比較されます。等号演算子がない場合、どちらの値も他方の値より小さい場合、値は等しいとみなされます。等号演算子も使用可能で、そのような2つの値が等しくない場合、浮動小数点型のNaN(数値ではない)値がその順序の外にあるのと同じように、それらは順序なしとみなされます。

注意: メタタイプ宣言に小なり演算子が表示されていない場合、宣言に表示されている等号演算子がそれらを等しいとみなしたとしても、値は順序付けされていません:compare() == 0 は、小なり演算子が表示されている場合にのみequals() と一致します。

この関数は Qt 6.0 で導入されました。

equals() およびisOrdered()も参照してください

void *QMetaType::construct(void *where, const void *copy = nullptr) const

where によってアドレス指定された既存のメモリに、このQMetaType インスタンスが構築された型の値を構築し、それはcopy のコピーであり、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 を返す。

fromto の両方が有効なポインタでなければならない。

void *QMetaType::create(const void *copy = nullptr) const

このQMetaType インスタンスが作成された型であると仮定して、copy のコピーを返す。copynullptr の場合、デフォルトのインスタンスを作成します。

QMetaType::destroy()も参照してください

bool QMetaType::debugStream(QDebug &dbg, const void *rhs)

rhs のオブジェクトをデバッグ・ストリームdbg にストリームします。成功した場合はtrue を返し、そうでない場合は false を返します。

void QMetaType::destroy(void *data) const

このQMetaType インスタンスが作成された型であると仮定して、data を破棄します。

QMetaType::create()も参照してください

void QMetaType::destruct(void *data) const

このQMetaType インスタンスが作成された型であることを前提に、data にある値を破棄します。

destroy() とは異なり、この関数は型のデストラクタを呼び出すだけで、delete 演算子は呼び出されません。

QMetaType::construct()も参照

[since 6.0] bool QMetaType::equals(const void *lhs, const void *rhs) const

lhsrhs のオブジェクトが等しいかどうかを比較する。

どちらのオブジェクトもこのメタタイプで記述された型でなければなりません。2つのオブジェクトを比較できるのは、メタタイプの宣言時に、その型に対する小なり演算子または等号演算子が見えていた場合のみです。そうでない場合、メタタイプは値が等しいと見なしません。等号演算子がメタタイプ宣言で可視であった場合、それが権威となります。そうでない場合、less than が可視であれば、どちらの値も他方の値より小さい場合、両者は等しいとみなされます。値が順序付けされていない場合(詳細はcompare() を参照)、それらは等しくない。

2つのオブジェクトが等しいと比較された場合はtrueを返し、そうでない場合はfalseを返します。

この関数は Qt 6.0 で導入されました。

isEqualityComparable() およびcompare()も参照してください

[constexpr] QMetaType::TypeFlags QMetaType::flags() const

このQMetaType インスタンスが構築された型のフラグを返します。特定の型の特徴を調べるには、フラグを直接使用するのではなく、"is-" 関数のいずれかを使用することをお勧めします。

QMetaType::TypeFlags, QMetaType::flags(),isDefaultConstructible(),isCopyConstructible(),isMoveConstructible(),isDestructible(),isEqualityComparable(),isOrdered()も参照

[static] QMetaType QMetaType::fromName(QByteArrayView typeName)

typeName にマッチするQMetaType を返します。に対応する を返します。QMetaType

[static constexpr] template <typename T> QMetaType QMetaType::fromType()

テンプレート・パラメータの型に対応するQMetaType を返します。

[static] bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)

メタ型システムがメタ型 IDfromType からの変換を登録している場合は、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

この型が move-constructed であれば true を返します。QMetaType は現在、この特性を利用するための API を持っていません。

この関数は Qt 6.5 で導入されました。

flags(),isDefaultConstructible(),isCopyConstructible(),isDestructible()も参照してください

bool QMetaType::isOrdered() const

このメタタイプで記述された型の less than 演算子がメタタイプ宣言で可視であった場合はtrue を返し、そうでない場合はfalse を返します。

compare() およびisEqualityComparable()も参照

bool QMetaType::isRegistered() const

このQMetaType オブジェクトが Qt グローバルメタタイプレジストリに登録されている場合、true を返します。登録することで、(QMetaType::fromName() を使用した)名前、または(コンストラクタを使用した)IDによって型を見つけることができます。

qRegisterMetaType() およびisValid()も参照してください

[static] bool QMetaType::isRegistered(int type)

IDtype を持つデータ型が登録されている場合はtrue を返し、そうでない場合はfalse を返します。

type()、typeName()、Typeも参照して ください。

bool QMetaType::isValid() const

このQMetaType オブジェクトに型に関する有効な情報が含まれている場合はtrue を返し、そうでない場合は false を返します。

isRegistered()も参照

bool QMetaType::load(QDataStream &stream, void *data) const

与えられたstream から、この型のオブジェクトをdata に読み込みます。オブジェクトが正常に読み込まれた場合はtrue を返し、そうでない場合はfalse を返します。

通常、この関数を直接呼び出す必要はありません。その代わりに、QVariantoperator>>() を使用してください。 は、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 を返します。これは、QMetaMethodQMetaProperty を取得し、QVariant::data() のように、この型のポインタで使用するために使用できます。

型が列挙型の場合、flags() はQMetaType::IsEnumeration を含む。この場合、この関数は、列挙型がQ_ENUM として登録されていれば、それを囲むオブジェクトのQMetaObject を返し、そうでなければnullptr を返します。

QMetaType::flags()も参照

[constexpr] const char *QMetaType::name() const

このQMetaType に関連付けられた型名、または一致する型が見つからなかった場合は NULL ポインタを返します。返されたポインタは削除してはならない。

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::*)() const function)

これはオーバーロードされた関数です。

To From::function() const のようなメソッドfunction を、メタ型システムにおけるFrom型からTo型へのコンバータとして登録します。登録に成功した場合は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::*)(bool *) const function)

これはオーバーロードされた関数です。

メタ型システムのFrom型からTo型へのコンバータとして、To From::function(bool *ok) constのようなメソッドfunction を登録します。登録が成功すれば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)

これはオーバーロードされた関数です。

メタ型システムのFrom型からTo型へのコンバータとして単項関数オブジェクトfunction を登録します。登録が成功すればtrue を返し、そうでなければ false を返します。

function は、 型のインスタンスを取り、 型のインスタンスを返さなければなりません。これは、関数ポインタ、ラムダ、またはファンクタオブジェクトであることができます。Qt 6.5以降、 は、変換に失敗したことを示すために、 のインスタンスを返すこともできます。From To function std::optional<To>

QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) {
    return QString::fromUtf8(str.data());
});
QMetaType::registerConverter<QJsonValue, QPointF>(
          [](const QJsonValue &value) -> std::optional<QPointF> {
    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 QPointF{object["x"].toDouble(), object["y"].toDouble()};
});

[static, since 6.0] template <typename From, typename To> bool QMetaType::registerMutableView(To (From::*)() function)

これはオーバーロードされた関数です。

To From::function() のようなメソッドfunction を、メタ型システムのFrom 型のTo 型のミュータブル・ビューとして登録します。登録が成功すればtrue を返し、そうでなければfalse を返します。

この関数はQt 6.0で導入されました。

[static, since 6.0] template <typename From, typename To, typename UnaryFunction> bool QMetaType::registerMutableView(UnaryFunction function)

これはオーバーロードされた関数です。

メタ型システムのFrom型にTo型のミュータブルビューとして単項関数オブジェクトfunction を登録します。登録が成功すればtrue を返し、そうでなければfalse を返します。

この関数は Qt 6.0 で導入されました。

[since 6.5] void QMetaType::registerType() const

このQMetaType を型レジストリに登録し、QMetaType::fromName() を使って名前で見つけられるようにします。

この関数は Qt 6.5 で導入されました。

qRegisterMetaType()も参照してください

bool QMetaType::save(QDataStream &stream, const void *data) const

data が指すオブジェクトを、与えられたstream に書き込みます。オブジェクトが正常に保存された場合はtrue を返し、そうでない場合はfalse を返します。

通常、この関数を直接呼び出す必要はありません。その代わりに、QVariantoperator<<() を使用してください。 は、 save() に依存してカスタム・タイプをストリーミングします。

load()も参照

[constexpr] qsizetype QMetaType::sizeOf() const

型のサイズをバイト単位で返します(つまり sizeof(T)、ここで T は、このQMetaType インスタンスが構築された実際の型です)。

この関数は通常、construct() と一緒に使用して、型が使用するメモリの低レベル管理を行います。

QMetaType::construct()、QMetaType::sizeOf()、および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)

fromTypefrom にあるオブジェクトに対して、totoType で型付けされた事前に割り当てられた空間に、変更可能なビューを作成します。変換が成功すればtrue を返し、そうでなければ false を返します。

この関数は Qt 6.0 で導入されました。

関連する非メンバー

[since 6.4] size_t qHash(QMetaType type, size_t seed = 0)

type のハッシュ値を返します。計算のシードとして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 declared

QMetaType::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 ()を使用する。

T 型をQMetaTypeQVariant 、またはQObject::property() API で使用する場合、登録は必要ありません。

キューイングされたシグナルおよびスロット接続でT 型を使用するには、最初の接続が確立される前にqRegisterMetaType<T>() を呼び出す必要がある。これは通常、T を使用するクラスのコンストラクタか、main() 関数で行われます。

型が登録された後は、QMetaType::fromName() を使用して、その名前で見つけることができる。

Q_DECLARE_METATYPE()も参照

[since 6.5] int qRegisterMetaType(QMetaType meta)

メタ型meta を登録し、その型 ID を返します。

この関数は、関数が呼び出された時点でT が完全に定義された型であることを必要とする。ポインタ型の場合は、指された型が完全に定義されていることも必要です。前方に宣言された型へのポインタを登録できるようにするには、Q_DECLARE_OPAQUE_POINTER ()を使用する。

T 型をQMetaTypeQVariant 、またはQObject::property() API で使用する場合、登録は必要ありません。

キューイングされたシグナルおよびスロット接続でT 型を使用するには、最初の接続が確立される前にqRegisterMetaType<T>() を呼び出す必要がある。これは通常、T を使用するクラスのコンストラクタか、main() 関数で行われます。

型が登録された後は、QMetaType::fromName() を使ってその名前で見つけることができます。

この関数はQt 6.5で導入されました。

[noexcept] bool operator!=(const QMetaType &lhs, const QMetaType &rhs)

これはオーバーロードされた関数です。

QMetaType lhsQMetaType 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 lhsQMetaType 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_list>

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map)

void someFunc()
{
    std::unordered_map<int, bool> container;
    QVariant var = QVariant::fromValue(container);
    // ...
}

Q_DECLARE_METATYPE(Type)

Type このマクロは、publicなデフォルトコンストラクタ、publicなコピーコンストラクタ、publicなデストラクタを提供する限り、QMetaType 。このマクロは、Type 型をQVariant のカスタム型として使用するために必要です。

このマクロでは、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
{
    ...
}

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>();

いくつかの型は自動的に登録されるので、このマクロは必要ありません:

注意: このメソッドは、ストリーム演算子とデバッグ演算子も登録します。これはいくつかの場所で自動的に行われるため、型のストリーム演算子は型自体の後で直接宣言することを強くお勧めします。C++の引数依存の検索ルールのため、型自身と同じ名前空間で演算子を宣言することも強く推奨されます。

ストリーム演算子は、以下のシグネチャを持つ必要があります:

QDataStream &operator<<(QDataStream &out, const MyClass &myObj);
QDataStream &operator>>(QDataStream &in, MyClass &myObj);

qRegisterMetaType()も参照

Q_DECLARE_OPAQUE_POINTER(PointerType)

このマクロを使用すると、Q_DECLARE_METATYPE() またはqRegisterMetaType() を使用して、前方宣言型 (PointerType) へのポインタをQMetaType に登録できます。

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)

void someFunc()
{
    auto smart_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'.
    }
}

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。