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) |
マクロ
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::QCursor | 0x100a | Qカーソル |
QMetaType::QDate | 14 | QDate |
QMetaType::QSize | 21 | Qサイズ |
QMetaType::QTime | 15 | QTime |
QMetaType::QVariantList | 9 | Qバリアントリスト |
QMetaType::QPolygon | 0x1007 | Qポリゴン |
QMetaType::QPolygonF | 0x1016 | QPolygonF |
QMetaType::QColor | 0x1003 | QColor |
QMetaType::QColorSpace | 0x1017 | QColorSpace (Qt 5.15 で導入) |
QMetaType::QSizeF | 22 | QSizeF |
QMetaType::QRectF | 20 | QRectF |
QMetaType::QLine | 23 | QLine |
QMetaType::QTextLength | 0x100d | QTextLength |
QMetaType::QStringList | 11 | QStringList |
QMetaType::QVariantMap | 8 | QVariantMap |
QMetaType::QVariantHash | 28 | QVariantHash |
QMetaType::QVariantPair | 58 | QVariantPair |
QMetaType::QIcon | 0x1005 | QIcon |
QMetaType::QPen | 0x100c | Qペン |
QMetaType::QLineF | 24 | QLineF |
QMetaType::QTextFormat | 0x100e | QTextFormat |
QMetaType::QRect | 19 | QRect |
QMetaType::QPoint | 25 | Qポイント |
QMetaType::QUrl | 17 | QUrl |
QMetaType::QRegularExpression | 44 | QRegularExpression |
QMetaType::QDateTime | 16 | QDateTime |
QMetaType::QPointF | 26 | QPointF |
QMetaType::QPalette | 0x1004 | QPalette |
QMetaType::QFont | 0x1000 | Qフォント |
QMetaType::QBrush | 0x1002 | QBrush |
QMetaType::QRegion | 0x1008 | QRegion |
QMetaType::QBitArray | 13 | QBit配列 |
QMetaType::QImage | 0x1006 | Q画像 |
QMetaType::QKeySequence | 0x100b | Qキーシーケンス |
QMetaType::QSizePolicy | 0x2000 | Qサイズポリシー |
QMetaType::QPixmap | 0x1001 | QPixmap |
QMetaType::QLocale | 18 | Qロケール |
QMetaType::QBitmap | 0x1009 | QBitmap |
QMetaType::QTransform | 0x1010 | QTransform |
QMetaType::QMatrix4x4 | 0x1011 | QMatrix4x4 |
QMetaType::QVector2D | 0x1012 | QVector2D |
QMetaType::QVector3D | 0x1013 | QVector3D |
QMetaType::QVector4D | 0x1014 | QVector4D |
QMetaType::QQuaternion | 0x1015 | QQuaternion |
QMetaType::QEasingCurve | 29 | Qイージングカーブ |
QMetaType::QJsonValue | 45 | QJsonValue |
QMetaType::QJsonObject | 46 | QJsonObject |
QMetaType::QJsonArray | 47 | QJsonArray |
QMetaType::QJsonDocument | 48 | QJsonDocument |
QMetaType::QCborValue | 53 | QCbor値 |
QMetaType::QCborArray | 54 | QCbor配列 |
QMetaType::QCborMap | 55 | QCborMap |
QMetaType::QCborSimpleType | 52 | QCborSimpleType |
QMetaType::QModelIndex | 42 | QModelIndex |
QMetaType::QPersistentModelIndex | 50 | QPersistentModelIndex (Qt 5.5 で導入) |
QMetaType::QUuid | 30 | QUid |
QMetaType::QByteArrayList | 49 | QByteArrayList |
QMetaType::QVariant | 41 | QVariant |
QMetaType::User | 65536 | ユーザー型のベース値 |
QMetaType::UnknownType | 0 | これは無効な型IDです。これは、登録されていない型に対してQMetaType から返される。 |
追加の型は、qRegisterMetaType ()を使用するか、registerType ()を呼び出すことで登録できます。
enum QMetaType::TypeFlag
flags QMetaType::TypeFlags.
この列挙型は、QMetaType でサポートされる型の属性を記述します。
定数 | 値 | 説明 |
---|---|---|
QMetaType::NeedsConstruction | 0x1 | この型はデフォルトのコンストラクタを持ちます。このフラグが設定されていない場合、インスタンスは memset で安全に 0 に初期化できます。 |
QMetaType::NeedsCopyConstruction | 0x4000 | (6.5以降) この型は自明でないコピーコンストラクタを持ちます。フラグが設定されていない場合、インスタンスは memcpy でコピーできます。 |
QMetaType::NeedsMoveConstruction | 0x8000 | (6.5以降)この型は自明でない移動コンストラクタを持ちます。フラグが設定されていない場合、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, 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
を返します。
Qtでは以下の変換がサポートされています:
プリミティブ型(int、float、boolなど)間のキャストがサポートされています。
fromType で記述された型からtoType で記述された型へのqobject_cast が成功する場合、QObject から派生した型のポインタ間の変換もこの関数で真を返します。
シーケンシャルコンテナからのキャストも、toType がQVariantList である場合、この関数は真を返す。
同様に、連想コンテナからのキャストも、toType がQVariantHash またはQVariantMap の場合、この関数に対して真を返します。
convert()、QSequentialIterable 、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()、QAssociativeIterable 、Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()も参照 。
[static]
bool QMetaType::canView(QMetaType fromType, QMetaType toType)
QMetaType::view がtoType 型のミュータブル・ビューをfromType 型上に作成できる場合、true
を返す。
QObject から派生した型のポインタ間の変換は、fromType で記述された型からtoType で記述された型へのqobject_cast が成功する場合、この関数は真を返す。
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE ()で登録された任意のコンテナ上に、QSequentialIterable 型のミュータブル・ビューを作成することができる。
同様に、Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()で登録されたコンテナ上にも、QAssociativeIterable 型の変更可能なビューを作成できる。
convert()、QSequentialIterable 、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()、QAssociativeIterable 、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
の場合、値は順序なしとなる。比較は、型の 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 を返す。
from とto の両方が有効なポインタでなければならない。
void *QMetaType::create(const void *copy = nullptr) const
このQMetaType インスタンスが作成された型であると仮定して、copy のコピーを返す。copy がnullptr
の場合、デフォルトのインスタンスを作成します。
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
lhs とrhs のオブジェクトが等しいかどうかを比較する。
どちらのオブジェクトもこのメタタイプで記述された型でなければなりません。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
を返します。
[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
を返します。
通常、この関数を直接呼び出す必要はありません。その代わりに、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 ポインタを返します。返されたポインタは削除してはならない。
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
を返します。
通常、この関数を直接呼び出す必要はありません。その代わりに、QVariant のoperator<<()
を使用してください。 は、 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)
fromType のfrom にあるオブジェクトに対して、to のtoType で型付けされた事前に割り当てられた空間に、変更可能なビューを作成します。変換が成功すれば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
型をQMetaType 、QVariant 、または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
型をQMetaType 、QVariant 、またはQObject::property() API で使用する場合、登録は必要ありません。
キューイングされたシグナルおよびスロット接続でT
型を使用するには、最初の接続が確立される前にqRegisterMetaType<T>()
を呼び出す必要がある。これは通常、T
を使用するクラスのコンストラクタか、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_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>();
いくつかの型は自動的に登録されるので、このマクロは必要ありません:
- から派生したクラスへのポインタ。QObject
- QList<T>,QQueue<T>,QStack<T> またはQSet<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)
このマクロを使用すると、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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。