QVariant Class

QVariant クラスは、最も一般的な Qt データ型のユニオンのように動作します。もっと詳しく...

ヘッダー #include <QVariant>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

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

パブリック関数

QVariant()
QVariant(QChar c)
QVariant(const char *val)
QVariant(double val)
QVariant(float val)
QVariant(int val)
QVariant(qlonglong val)
QVariant(qulonglong val)
QVariant(uint val)
QVariant(QMetaType type, const void *copy = nullptr)
(since 6.6) QVariant(std::in_place_type_t<T>, Args &&... args)
(since 6.6) QVariant(std::in_place_type_t<T>, std::initializer_list<U> il, Args &&... args)
QVariant(QDate val)
QVariant(QLatin1StringView val)
QVariant(QLine val)
QVariant(QLineF val)
QVariant(QPoint val)
QVariant(QPointF val)
QVariant(QRect val)
QVariant(QRectF val)
QVariant(QSize val)
QVariant(QSizeF val)
QVariant(QTime val)
QVariant(QUuid val)
QVariant(bool val)
QVariant(const QBitArray &val)
QVariant(const QByteArray &val)
QVariant(const QDateTime &val)
QVariant(const QEasingCurve &val)
QVariant(const QHash<QString, QVariant> &val)
QVariant(const QJsonArray &val)
QVariant(const QJsonDocument &val)
QVariant(const QJsonObject &val)
QVariant(const QJsonValue &val)
QVariant(const QList<QVariant> &val)
QVariant(const QLocale &l)
QVariant(const QMap<QString, QVariant> &val)
QVariant(const QModelIndex &val)
QVariant(const QPersistentModelIndex &val)
QVariant(const QRegularExpression &re)
QVariant(const QString &val)
QVariant(const QStringList &val)
QVariant(const QUrl &val)
QVariant(const QVariant &p)
QVariant(QVariant &&other)
~QVariant()
bool canConvert() const
(since 6.0) bool canConvert(QMetaType type) const
bool canView() const
void clear()
const void *constData() const
(since 6.0) bool convert(QMetaType targetType)
void *data()
const void *data() const
(since 6.6) T &emplace(Args &&... args)
(since 6.6) T &emplace(std::initializer_list<U> list, Args &&... args)
bool isNull() const
bool isValid() const
(since 6.0) QMetaType metaType() const
void setValue(QVariant &&value)
void setValue(T &&value)
void setValue(const QVariant &value)
void swap(QVariant &other)
QBitArray toBitArray() const
bool toBool() const
QByteArray toByteArray() const
QChar toChar() const
QDate toDate() const
QDateTime toDateTime() const
double toDouble(bool *ok = nullptr) const
QEasingCurve toEasingCurve() const
float toFloat(bool *ok = nullptr) const
QHash<QString, QVariant> toHash() const
int toInt(bool *ok = nullptr) const
QJsonArray toJsonArray() const
QJsonDocument toJsonDocument() const
QJsonObject toJsonObject() const
QJsonValue toJsonValue() const
QLine toLine() const
QLineF toLineF() const
QList<QVariant> toList() const
QLocale toLocale() const
qlonglong toLongLong(bool *ok = nullptr) const
QMap<QString, QVariant> toMap() const
QModelIndex toModelIndex() const
QPersistentModelIndex toPersistentModelIndex() const
QPoint toPoint() const
QPointF toPointF() const
qreal toReal(bool *ok = nullptr) const
QRect toRect() const
QRectF toRectF() const
QRegularExpression toRegularExpression() const
QSize toSize() const
QSizeF toSizeF() const
QString toString() const
QStringList toStringList() const
QTime toTime() const
uint toUInt(bool *ok = nullptr) const
qulonglong toULongLong(bool *ok = nullptr) const
QUrl toUrl() const
QUuid toUuid() const
int typeId() const
const char *typeName() const
int userType() const
T value() const &
T view()
QVariant &operator=(QVariant &&other)
QVariant &operator=(const QVariant &variant)

静的パブリック・メンバー

(since 6.0) QPartialOrdering compare(const QVariant &lhs, const QVariant &rhs)
(since 6.7) QVariant fromMetaType(QMetaType type, const void *copy = nullptr)
QVariant fromStdVariant(const std::variant<Types...> &value)
(since 6.6) QVariant fromStdVariant(std::variant<Types...> &&value)
QVariant fromValue(const T &value)
(since 6.6) QVariant fromValue(T &&value)
QVariantHash
QVariantList
QVariantMap
(since 6.6) T &get(QVariant &v)
(since 6.6) T &&get(QVariant &&v)
(since 6.6) const T &get(const QVariant &v)
(since 6.6) const T &&get(const QVariant &&v)
(since 6.6) T *get_if(QVariant *v)
(since 6.6) const T *get_if(const QVariant *v)
T qvariant_cast(const QVariant &value)
(since 6.7) T qvariant_cast(QVariant &&value)
bool operator!=(const QVariant &lhs, const QVariant &rhs)
QDataStream &operator<<(QDataStream &s, const QVariant &p)
bool operator==(const QVariant &lhs, const QVariant &rhs)
QDataStream &operator>>(QDataStream &s, QVariant &p)

詳細説明

C++ では、デフォルト以外のコンストラクタやデストラクタを持つ型をユニオンに含めることが禁じられているため、ほとんどの興味深い Qt クラスはユニオンで使用できません。QVariant がなければ、これはQObject::property() やデータベース作業などで問題になります。

QVariantオブジェクトは、一度に単一のtypeId ()の単一の値を保持します。(文字列リストなど、多値の型もあります。) バリアントが保持する型 T を調べ、convert() を使用して別の型に変換し、toT() 関数の 1 つ (たとえば、toSize()) を使用してその値を取得し、canConvert() を使用してその型が特定の型に変換できるかどうかを確認できます。

toT()という名前のメソッド(例えば、toInt()、toString())は、constである。格納されている型を求めると、格納されているオブジェクトのコピーを返します。格納されている型から生成できる型を要求した場合、toT() はコピーと変換を行い、オブジェクト自体は変更されません。格納されている型から生成できない型を指定した場合、結果は型に依存します。

詳細は関数のドキュメントを参照してください。以下に、QVariant の使用法を示すサンプル・コードを示します:

QDataStreamout(...);QVariantv(123);// バリアントは int を含むintx=v.toInt();// x = 123out<<v;// 型タグと int を out に書き出すv=QVariant(tr("hello"));// variant は QString を含むようになったinty=v.toInt();// v は int に変換できないので、y = 0 になるQStrings=v.toString();// s = tr("hello") (QObject::tr() を参照)out<<v;// 型タグと QString を out...  に書き込む QDataStreamin(...);// (前に書き込んだストリームを開く)in>>v;// Int 型バリアントを読み込むintz=v.toInt();// z = 123qDebug("Type is %s",            // prints "Type is int"
        v.typeName()); v=v.toInt()+ 100;// バリアントは現在、値を保持している 223v=QVariant(QStringList());// バリアントは QStringList
を保持します。

QList<QVariant> やQMap<QString, QVariant> の値をバリアントに格納することもできるので、任意の型の任意の複雑なデータ構造を簡単に構築することができます。これは非常に強力で多用途ですが、標準的なデータ構造に特定の型を格納するよりもメモリ効率や速度効率が悪いことがわかるかもしれません。

QVariant は NULL 値の概念もサポートしています。バリアントが初期化された値を持たないか、ヌル・ポインタを含む場合、バリアントはヌルです。

QVariant x;                                // x.isNull() == true
QVariant y = QVariant::fromValue(nullptr); // y.isNull() == true

QVariant は、QMetaType::Type enum で言及されている以外の型をサポートするように拡張することができます。詳細は「カスタム Qt タイプの作成」を参照してください。

GUI型に関する注意

QVariant はQt Core モジュールの一部であるため、QColorQImageQPixmap のような、Qt GUI で定義されたデータ型への変換関数を提供することはできません。言い換えれば、toColor() 関数はありません。代わりに、QVariant::value() またはqvariant_cast() テンプレート関数を使用できます。例えば

QVariant variant;
...
QColor color = variant.value<QColor>();

逆変換(例えば、QColor から QVariant への変換)は、GUI 関連の型を含め、QVariant がサポートするすべてのデータ型に対して自動的に行われます:

QColor color = palette().background().color();
QVariant variant = color;

canConvert()と convert() の連続使用

canConvert() とconvert() を連続して使用すると、canConvert() は真を返しますが、convert() は偽を返すことがあります。これは一般的に、canConvert() は、適切なデータが与えられた場合に、QVariant が型間で変換する一般的な能力を報告するだけであるためです。

例えば、canConvert(QMetaType::fromType<int>()) は文字列を含むバリアントで呼び出されると真を返します。なぜなら、原理的に QVariant は数値の文字列を整数に変換できるからです。しかし、文字列に数字以外の文字が含まれている場合、それを整数に変換することはできず、変換しようとしても失敗します。したがって、変換に成功した場合に両方の関数がtrueを返すようにすることが重要です。

QMetaTypeも参照のこと

メンバ関数ドキュメント

int QVariant::typeId() const

int QVariant::userType() const

variant に格納されている値の格納タイプを返します。これはmetaType().id() と同じです。

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

const void *QVariant::constData() const

const void *QVariant::data() const

含まれるオブジェクトへのポインタを、書き込めない汎用 void* として返す。

get_if() およびQMetaTypeも参照のこと

[noexcept] QVariant::QVariant()

無効なバリアントを構築します。

[noexcept] QVariant::QVariant(QChar c)

char 値c を持つ新しいバリアントを構築する。

QVariant::QVariant(const char *val)

val の文字列値で新しい variant を構築します。 variant はval のディープコピーを、入力val の UTF-8 エンコーディングを仮定したQString に作成します。

val は variant に格納するためにQString に変換され、QVariant::userType() は variant に対してQMetaType::QString を返すことに注意してください。

アプリケーションをコンパイルするときにQT_NO_CAST_FROM_ASCII を定義することで、この演算子を無効にすることができます。

[noexcept] QVariant::QVariant(double val)

浮動小数点値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(float val)

浮動小数点値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(int val)

整数値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(qlonglong val)

長い整数値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(qulonglong val)

符号なし long long 整数値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(uint val)

符号なし整数値val を持つ新しいバリアントを構築する。

[explicit] QVariant::QVariant(QMetaType type, const void *copy = nullptr)

type 型のバリアントを構築し、copynullptr でない場合は*copy のコピーで初期化する(この場合、copytype 型のオブジェクトを指す必要がある)。

格納したいオブジェクトのアドレスを渡さなければならないことに注意。

通常はこのコンストラクタを使う必要はなく、代わりにQMetaType::VoidStarQMetaType::QObjectStar で表されるポインタ型からバリアントを構築するためにQVariant::fromValue() を使います。

type がコピー構築に対応しておらず、copynullptr でない場合、バリアントは無効となる。同様に、copynullptr で、type がデフォルト構築をサポートしていない場合、バリアントは無効となる。

QVariant::fromMetaTypeQVariant::fromValue()、QMetaType::Typeも参照のこと

[explicit noexcept(...), since 6.6] template <typename T, typename... Args, QVariant::if_constructible<T, Args...> = true> QVariant::QVariant(std::in_place_type_t<T>, Args &&... args)

T 型の値を含む新しいバリアントを構築します。含まれる値は引数std::forward<Args>(args)... で初期化されます。

このオーバーロードは、Targs から構築できる場合にのみ、オーバーロード解決に参加します。

このコンストラクタは、STL/std::any との互換性のために提供されています。

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

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

注意: is_noexcept_constructible<q20::remove_cvref_t<T>, Args...>::valuetrue の場合、この関数は noexcept となります。

[explicit noexcept(...), since 6.6] template <typename T, typename U, typename... Args, QVariant::if_constructible<T, std::initializer_list<U> &, Args...> = true> QVariant::QVariant(std::in_place_type_t<T>, std::initializer_list<U> il, Args &&... args)

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

このオーバーロードは、initializer_list を取るコンストラクタを持つ型をサポートするために存在します。それ以外の振る舞いは、イニシャライザを持たないリストin_place_type_t のオーバーロードと同等です。

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

注意: is_noexcept_constructible<q20::remove_cvref_t<T>, std::initializer_list<U> &, Args... >::valuetrue の場合、この関数は noexcept となります。

[noexcept] QVariant::QVariant(QDate val)

日付値val を持つ新しいバリアントを構築する。

QVariant::QVariant(QLatin1StringView val)

val で見た Latin-1 文字列からQString の値を持つ新しい variant を構築する。

[noexcept(...)] QVariant::QVariant(QLine val)

行値がval の新しいバリアントを構築します。

注意: この関数はPrivate::FitsInInternalSize<sizeof(int) * 4>true のとき noexcept となる。

[noexcept(...)] QVariant::QVariant(QLineF val)

行値がval の新しいバリアントを構築します。

注意: この関数はPrivate::FitsInInternalSize<sizeof(qreal) * 4>true のとき noexcept となる。

[noexcept] QVariant::QVariant(QPoint val)

ポイント値がval の新しいバリアントを構築する。

[noexcept(...)] QVariant::QVariant(QPointF val)

ポイント値がval の新しい variant を構築する。

注意: この関数はPrivate::FitsInInternalSize<sizeof(qreal) * 2>true のとき noexcept となる。

[noexcept(...)] QVariant::QVariant(QRect val)

rect 値がval の新しい variant を構築します。

注意: Private::FitsInInternalSize<sizeof(int) * 4>true のとき、この関数は noexcept となります。

[noexcept(...)] QVariant::QVariant(QRectF val)

rect 値がval の新しい variant を構築します。

注意: Private::FitsInInternalSize<sizeof(qreal) * 4>true のとき、この関数は noexcept となります。

[noexcept] QVariant::QVariant(QSize val)

サイズ値がval の新しいバリアントを構築する。

[noexcept(...)] QVariant::QVariant(QSizeF val)

サイズ値がval の新しい variant を構築します。

注意: この関数はPrivate::FitsInInternalSize<sizeof(qreal) * 2>true のときは noexcept となる。

[noexcept] QVariant::QVariant(QTime val)

時間値val を持つ新しいバリアントを構築する。

[noexcept(...)] QVariant::QVariant(QUuid val)

uuid 値val を持つ新しい variant を構築します。

注意: この関数はPrivate::FitsInInternalSize<16>true のときは noexcept です。

[noexcept] QVariant::QVariant(bool val)

ブール値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QBitArray &val)

ビット配列値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QByteArray &val)

バイト配列値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QDateTime &val)

日時値val を持つ新しいバリアントを構築する。

QVariant::QVariant(const QEasingCurve &val)

イージングカーブ値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QHash<QString, QVariant> &val)

QVariants,val のハッシュを持つ新しい variant を構築する。

[noexcept] QVariant::QVariant(const QJsonArray &val)

json 配列値val を持つ新しい variant を構築します。

QVariant::QVariant(const QJsonDocument &val)

json ドキュメント値val を持つ新しい variant を構築します。

[noexcept] QVariant::QVariant(const QJsonObject &val)

json オブジェクト値val を持つ新しい variant を構築します。

[noexcept(...)] QVariant::QVariant(const QJsonValue &val)

json 値val を持つ新しい variant を構築します。

注意: この関数はPrivate::FitsInInternalSize<sizeof(CborValueStandIn)>true のときは noexcept です。

[noexcept] QVariant::QVariant(const QList<QVariant> &val)

リスト値val を持つ新しいバリアントを構築します。

[noexcept] QVariant::QVariant(const QLocale &l)

ロケール値l を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QMap<QString, QVariant> &val)

QVariants,val のマップを持つ新しいバリアントを構築する。

[noexcept(...)] QVariant::QVariant(const QModelIndex &val)

新しいバリアントをQModelIndex の値val で構築します。

注意: この関数はPrivate::FitsInInternalSize<8 + 2 * sizeof(quintptr)>true のときは noexcept となる。

QVariant::QVariant(const QPersistentModelIndex &val)

新しいバリアントをQPersistentModelIndex の値val で構築する。

[noexcept] QVariant::QVariant(const QRegularExpression &re)

正規表現値re で新しいバリアントを構築します。

[noexcept] QVariant::QVariant(const QString &val)

文字列値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QStringList &val)

文字列リスト値val を持つ新しいバリアントを構築する。

[noexcept] QVariant::QVariant(const QUrl &val)

val の url 値を持つ新しい variant を構築します。

QVariant::QVariant(const QVariant &p)

このコンストラクタの引数として渡されたバリアントp のコピーを構築します。

[noexcept] QVariant::QVariant(QVariant &&other)

Move-QVariantインスタンスを構築し、other が指していたのと同じオブジェクトを指すようにする。

[noexcept] QVariant::~QVariant()

QVariant と含まれるオブジェクトを破棄します。

template <typename T> bool QVariant::canConvert() const

バリアントがテンプレート型T に変換できる場合はtrue を返し、そうでない場合は false を返します。

QVariant v = 42;

v.canConvert<int>();              // returns true
v.canConvert<QString>();          // returns true

MyCustomStruct s;
v.setValue(s);

v.canConvert<int>();              // returns false
v.canConvert<MyCustomStruct>();   // returns true

例:QObject から派生した型へのポインタを含むQVariant は、qobject_cast からT のテンプレート型への変換が成功する場合、この関数も真を返します。これはQ_OBJECT マクロを使用するQObject サブクラスに対してのみ動作することに注意。

convert()も参照

[since 6.0] bool QVariant::canConvert(QMetaType type) const

バリアントの型を要求された型type にキャストできる場合はtrue を返します。このようなキャストはtoInt(),toBool(), ... メソッドを呼び出すときに自動的に行われます。

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

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

template <typename T> bool QVariant::canView() const

T テンプレート型の mutable ビューがこのバリアントに作成できる場合はtrue を、そうでない場合はfalse を返します。

value()も参照して ください。

void QVariant::clear()

この variant をタイプQMetaType::UnknownType に変換し、使用されているリソースを解放する。

[static, since 6.0] QPartialOrdering QVariant::compare(const QVariant &lhs, const QVariant &rhs)

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

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

variant が異なるメタタイプのデータを含んでいる場合、値が両方とも数値型かポインタ型でない限り、順序なしとみなされ、通常の数値型かポインタ型の比較規則が使われます。

注意: : もし数値比較が行われて、少なくとも一つの値が NaN であれば、QPartialOrdering::Unordered が返されます。

両方の variant が同じメタタイプのデータを含む場合、このメソッドはQMetaType::compare メソッドを使用して 2 つの variant の順序を決定します。

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

QMetaType::compare() およびQMetaType::isOrdered()も参照してください

[since 6.0] bool QVariant::convert(QMetaType targetType)

variant を要求された型targetType にキャストします。キャストができなかった場合、variant は要求された型に変更されますが、QVariant(Type) で構築されたのと同じようなクリアされた null 状態になります。

バリアントの現在の型が正常にキャストされた場合はtrue を返し、そうでない場合はfalse を返します。

QObject から派生した型へのポインタを含むQVariant も、targetType で記述された型へのqobject_cast が成功する場合は変換され、この関数に対して真を返します。これはQ_OBJECT マクロを使用するQObject サブクラスに対してのみ機能することに注意してください。

注意: 初期化されていなかったり、以前の変換に失敗したためにNULLであるQVariantsの変換は常に失敗し、型が変更され、NULLのままとなり、false を返します。

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

canConvert() とclear()も参照してください

void *QVariant::data()

含まれるオブジェクトへのポインタを、書き込み可能な汎用 void* として返す。

この関数はQVariant をデタッチする。null-QVariant に対して呼び出された場合、呼び出し後にQVariant が NULL になることはない。

get_if() およびQMetaTypeも参照のこと

[since 6.6] template <typename T, typename... Args, QVariant::if_constructible<T, Args...> = true> T &QVariant::emplace(Args &&... args)

現在*this に保持されているオブジェクトを、args... から構築されたT 型のオブジェクトに置き換える。*this が非 null であった場合、以前に保持されていたオブジェクトが最初に破棄される。可能であれば、このメソッドはQVariant によって割り当てられたメモリを再利用します。 新たに作成されたオブジェクトへの参照を返します。

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

[since 6.6] template <typename T, typename U, typename... Args, QVariant::if_constructible<T, std::initializer_list<U> &, Args...> = true> T &QVariant::emplace(std::initializer_list<U> list, Args &&... args)

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

このオーバーロードは、initializer_list を取るコンストラクタを持つ型をサポートするために存在します。それ以外の振る舞いは、イニシャライザを持たないリストのオーバーロードと同等です。

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

[static, since 6.7] QVariant QVariant::fromMetaType(QMetaType type, const void *copy = nullptr)

type 型のバリアントを作成し、copynullptr でない場合は*copy のコピーで初期化する(この場合、copytype 型のオブジェクトを指す必要がある)。

格納したいオブジェクトのアドレスを渡さなければならないことに注意。

通常はこのコンストラクタを使う必要はなく、代わりにQMetaType::VoidStarQMetaType::QObjectStar で表されるポインタ型からバリアントを構築するためにQVariant::fromValue() を使います。

type がコピー構築に対応しておらず、copynullptr でない場合、バリアントは無効となる。同様に、copynullptr であり、type がデフォルト構築をサポートしていない場合、バリアントは無効となります。

上記のように作成されたQVariant を返します。

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

QVariant::fromValue() およびQMetaType::Typeも参照してください

[static] template <typename... Types> QVariant QVariant::fromStdVariant(const std::variant<Types...> &value)

value のアクティブな variant の型と値を持つQVariant を返します。 アクティブな型が std::monostate の場合、デフォルトのQVariant が返されます。

注意: std::variant は格納される前に解決されるので、このメソッドでは variant を Qt メタタイプとして登録する必要はありません。しかし、コンポーネントタイプは登録する必要があります。

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

[static, since 6.6] template <typename... Types> QVariant QVariant::fromStdVariant(std::variant<Types...> &&value)

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

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

[static] template <typename T> QVariant QVariant::fromValue(const T &value)

value のコピーを含むQVariant を返す。それ以外はsetValue() と全く同じように動作する。

例:

MyCustomStruct s;
return QVariant::fromValue(s);

setValue() およびvalue()も参照

[static, since 6.6] template <typename T, QVariant::if_rvalue<T> = true> QVariant QVariant::fromValue(T &&value)

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

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

bool QVariant::isNull() const

これが null variant ならtrue を、そうでなければ false を返します。

バリアントは、初期化された値や NULL ポインタを含んでいない場合、NULL とみなされます。

注意: この動作は Qt 5 から変更されました。isNull() は、バリアントが組み込み型のオブジェクトを含んでいて、そのオブジェクトに対して真を返す isNull() メソッドがある場合にも真を返していました。

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

bool QVariant::isValid() const

このバリアントのストレージタイプがQMetaType::UnknownType でない場合はtrue を返し、そうでない場合はfalse を返す。

[since 6.0] QMetaType QVariant::metaType() const

variant に格納されている値のQMetaType を返します。

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

void QVariant::setValue(QVariant &&value)

このQVariant の上にvalue を移動する。これは単にvalue をこのQVariant に代入するのと等価である。

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

template <typename T, typename = std::enable_if_t<!std::is_same_v<std::decay_t<T>, QVariant>>> void QVariant::setValue(T &&value)

value のコピーを格納する。TQVariant がサポートしていない型の場合、QMetaType が値の格納に使用される。QMetaType がその型を扱わない場合、コンパイル・エラーが発生する。

QVariant v;

v.setValue(5);
int i = v.toInt();         // i is now 5
QString s = v.toString();  // s is now "5"

MyCustomStruct c;
v.setValue(c);

...

MyCustomStruct c2 = v.value<MyCustomStruct>();

value()、fromValue()、canConvert()も参照

void QVariant::setValue(const QVariant &value)

このQVariant の上にvalue をコピーする。これは単にvalue をこのQVariant に割り当てるのと同じです。

[noexcept] void QVariant::swap(QVariant &other)

このバリアントをother と入れ替える。この操作は非常に速く、失敗することはない。

QBitArray QVariant::toBitArray() const

variant がuserType()QMetaType::QBitArray を持っていればQBitArray として variant を返します ; そうでなければ空のビット配列を返します。

canConvert() およびconvert()も参照して ください。

bool QVariant::toBool() const

variant がuserType() Bool の場合、その variant を bool で返します。

falseバリアントがuserType()QMetaType::Bool,QMetaType::QChar,QMetaType::Double,QMetaType::Int,QMetaType::LongLong,QMetaType::UInt,QMetaType::ULongLong のいずれかを持ち、その値が 0 でない場合、またはバリアントがQMetaType::QString またはQMetaType::QByteArray のいずれかを持ち、その小文字の内容が empty, "0", "false" のいずれかでない場合にtrue を返します。

canConvert() とconvert()も参照

QByteArray QVariant::toByteArray() const

variant がuserType()QMetaType::QByteArray またはQMetaType::QString (QString::fromUtf8() を使って変換されたもの) を持っている場合はQByteArray として variant を返します。そうでない場合は空のバイト配列を返します。

canConvert() およびconvert()も参照して ください。

QChar QVariant::toChar() const

variant がuserType()QMetaType::QChar,QMetaType::Int,QMetaType::UInt のいずれかを持っている場合、その variant をQChar として返します ; それ以外の場合は無効なQChar を返します。

canConvert() およびconvert()も参照して ください。

QDate QVariant::toDate() const

variant がuserType()QMetaType::QDate,QMetaType::QDateTime,QMetaType::QString のいずれかであればQDate として variant を返し、そうでなければ無効な日付を返します。

type() がQMetaType::QString の場合、文字列をQt::ISODate 形式の日付としてパースできない場合は無効な日付が返されます。

canConvert() およびconvert()も参照

QDateTime QVariant::toDateTime() const

variant がuserType()QMetaType::QDateTime,QMetaType::QDate,QMetaType::QString のいずれかであればQDateTime として variant を返し、そうでなければ無効な日付/時刻を返します。

type() がQMetaType::QString の場合、文字列がQt::ISODate 形式の日付/時刻として解析できない場合は無効な日付/時刻が返されます。

canConvert() およびconvert()も参照のこと

double QVariant::toDouble(bool *ok = nullptr) const

variant がuserType()QMetaType::Double,QMetaType::Float,QMetaType::Bool,QMetaType::QByteArray,QMetaType::Int,QMetaType::LongLong,QMetaType::QString,QMetaType::UInt, またはQMetaType::ULongLong を持つ場合、double として variant を返す。

ok が non-null の場合:*ok の値が double に変換できた場合は true がセットされ、そうでない場合は*ok が false がセットされる。

canConvert() およびconvert()も参照のこと

QEasingCurve QVariant::toEasingCurve() const

variant がuserType()QMetaType::QEasingCurve を持っている場合はQEasingCurve として variant を返します ; そうでない場合はデフォルトのイージングカーブを返します。

canConvert() およびconvert()も参照して ください。

float QVariant::toFloat(bool *ok = nullptr) const

variant がuserType()QMetaType::Double,QMetaType::Float,QMetaType::Bool,QMetaType::QByteArray,QMetaType::Int,QMetaType::LongLong,QMetaType::QString,QMetaType::UInt, またはQMetaType::ULongLong を持つ場合、variant を float で返す;そうでなければ 0.0 を返す。

ok が non-null の場合:*ok の値が double に変換できた場合は true がセットされ、そうでない場合は*ok が false がセットされる。

canConvert() およびconvert()も参照のこと

QHash<QString, QVariant> QVariant::toHash() const

variant が type()QMetaType::QVariantHash を持っていればQHash<QString,QVariant> として variant を返します ; そうでなければ空のマップを返します。

canConvert() およびconvert()も参照して ください。

int QVariant::toInt(bool *ok = nullptr) const

variant がuserType()QMetaType::Int,QMetaType::Bool,QMetaType::QByteArray,QMetaType::QChar,QMetaType::Double,QMetaType::LongLong,QMetaType::QString,QMetaType::UInt, またはQMetaType::ULongLong を持っている場合、その variant を int で返す;そうでない場合は 0 を返す。

ok が non-null の場合:*ok が int に変換できる場合は true に設定され、そうでない場合は*ok が false に設定されます。

警告:警告:値がQMetaType::LongLong に変換可能であるが、intで表現するには大きすぎる場合、算術オーバーフローはok に反映されない。簡単な回避策は、QString::toInt() を使用することである。

canConvert() およびconvert()も参照の こと。

QJsonArray QVariant::toJsonArray() const

variant がuserType()QJsonArray を持っていればQJsonArray として variant を返します ; そうでなければデフォルトのQJsonArray を返します。

canConvert() およびconvert()も参照して ください。

QJsonDocument QVariant::toJsonDocument() const

variant がuserType()QJsonDocument を持っていればQJsonDocument として variant を返します ; そうでなければデフォルトのQJsonDocument を返します。

canConvert() およびconvert()も参照して ください。

QJsonObject QVariant::toJsonObject() const

variant がuserType()QJsonObject を持っていればQJsonObject として variant を返します ; そうでなければデフォルトのQJsonObject を返します。

canConvert() およびconvert()も参照して ください。

QJsonValue QVariant::toJsonValue() const

variant がuserType()QJsonValue を持っていればQJsonValue として variant を返します ; そうでなければデフォルトのQJsonValue を返します。

canConvert() およびconvert()も参照して ください。

QLine QVariant::toLine() const

variant がuserType()QMetaType::QLine を持っていればQLine として variant を返します ; そうでなければ無効なQLine を返します。

canConvert() およびconvert()も参照して ください。

QLineF QVariant::toLineF() const

variant がuserType()QMetaType::QLineF を持っていればQLineF として variant を返します ; そうでなければ無効なQLineF を返します。

canConvert() およびconvert()も参照して ください。

QList<QVariant> QVariant::toList() const

variant がuserType()QMetaType::QVariantList を持っていればQVariantList として返します。そうでない場合、QVariant は型をリストに変換してから返そうとします。これは、QVariantList にコンバータを登録した型や、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE を使ってシーケンシャルコンテナとして宣言された型では成功します。いずれの条件も真でない場合、この関数は空のリストを返す。

canConvert() およびconvert()も参照

QLocale QVariant::toLocale() const

variant がuserType()QMetaType::QLocale を持っていればQLocale として variant を返します ; そうでなければ無効なQLocale を返します。

canConvert() およびconvert()も参照して ください。

qlonglong QVariant::toLongLong(bool *ok = nullptr) const

variant がuserType()QMetaType::LongLong,QMetaType::Bool,QMetaType::QByteArray,QMetaType::QChar,QMetaType::Double,QMetaType::Int,QMetaType::QString,QMetaType::UInt, またはQMetaType::ULongLong を持っている場合、その variant を long long int で返す;そうでない場合は 0 を返す。

ok が NULL でない場合:*ok の値が int に変換できた場合は true がセットされ、そうでない場合は*ok が false がセットされる。

canConvert() およびconvert()も参照のこと

QMap<QString, QVariant> QVariant::toMap() const

variant が type()QMetaType::QVariantMap を持っていれば、その variant をQVariantMap として返します。そうでない場合、QVariant は型をマップに変換してから返そうとします。これは、QVariantMap にコンバータを登録した型や、Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE を使って連想コンテナとして宣言された型では成功します。いずれの条件も真でない場合、この関数は空のマップを返す。

canConvert() およびconvert()も参照のこと

QModelIndex QVariant::toModelIndex() const

variant がuserType()QModelIndex を持っていればQModelIndex として variant を返します ; そうでなければデフォルトのQModelIndex を返します。

canConvert()、convert()、toPersistentModelIndex()も参照して ください。

QPersistentModelIndex QVariant::toPersistentModelIndex() const

variant がuserType()QPersistentModelIndex を持っていればQPersistentModelIndex として variant を返します ; そうでなければデフォルトで構築されたQPersistentModelIndex を返します。

canConvert()、convert()、toModelIndex()も参照して ください。

QPoint QVariant::toPoint() const

variant がuserType()QMetaType::QPoint またはQMetaType::QPointF を持っていればQPoint を返します ; そうでなければ nullQPoint を返します。

canConvert() およびconvert()も参照して ください。

QPointF QVariant::toPointF() const

variant がuserType()QMetaType::QPoint またはQMetaType::QPointF を持っていればQPointF を返します ; そうでなければ nullQPointF を返します。

canConvert() およびconvert()も参照して ください。

qreal QVariant::toReal(bool *ok = nullptr) const

variant がuserType()QMetaType::Double,QMetaType::Float,QMetaType::Bool,QMetaType::QByteArray,QMetaType::Int,QMetaType::LongLong,QMetaType::QString,QMetaType::UInt, またはQMetaType::ULongLong を持っている場合、その variant を qreal として返す。

ok が non-null の場合:*ok の値が double に変換できた場合は true がセットされ、そうでない場合は*ok が false がセットされる。

canConvert() およびconvert()も参照のこと

QRect QVariant::toRect() const

variant がuserType()QMetaType::QRect を持っていればQRect として variant を返します ; そうでなければ無効なQRect を返します。

canConvert() およびconvert()も参照して ください。

QRectF QVariant::toRectF() const

variant がuserType()QMetaType::QRect またはQMetaType::QRectF を持っていればQRectF として variant を返します ; そうでなければ無効なQRectF を返します。

canConvert() およびconvert()も参照して ください。

QRegularExpression QVariant::toRegularExpression() const

variant がuserType()QRegularExpression を持っていればQRegularExpression を返します ; そうでなければ空のQRegularExpression を返します。

canConvert() およびconvert()も参照して ください。

QSize QVariant::toSize() const

variant がuserType()QMetaType::QSize を持っていればQSize として variant を返します ; そうでなければ無効なQSize を返します。

canConvert() およびconvert()も参照して ください。

QSizeF QVariant::toSizeF() const

variant がuserType()QMetaType::QSizeF を持っていればQSizeF として variant を返します ; そうでなければ無効なQSizeF を返します。

canConvert() およびconvert()も参照して ください。

QString QVariant::toString() const

バリアントにuserType() がある場合、バリアントをQString として返します:

QMetaType::QString QMetaType::Bool, , , , , , , , , , , または 。QMetaType::QByteArray QMetaType::QChar QMetaType::QDate QMetaType::QDateTime QMetaType::Double QMetaType::Int QMetaType::LongLong QMetaType::QStringList QMetaType::QTime QMetaType::UInt QMetaType::ULongLong

サポートされていないバリアントに対して QVariant::toString() を呼び出すと、空の文字列が返されます。

canConvert() およびconvert()も参照して ください。

QStringList QVariant::toStringList() const

バリアントがuserType()QMetaType::QStringList,QMetaType::QString,QString に変換できる型のQMetaType::QVariantList を持っている場合はQStringList としてバリアントを返します ; そうでない場合は空のリストを返します。

canConvert() およびconvert()も参照して ください。

QTime QVariant::toTime() const

variant がuserType()QMetaType::QTime,QMetaType::QDateTime,QMetaType::QString のいずれかであればQTime として variant を返し、そうでなければ無効な時刻を返します。

type() がQMetaType::QString の場合、文字列がQt::ISODate 形式の時刻として解析できない場合は無効な時刻が返されます。

canConvert() およびconvert()も参照のこと

uint QVariant::toUInt(bool *ok = nullptr) const

variant がuserType()QMetaType::UInt,QMetaType::Bool,QMetaType::QByteArray,QMetaType::QChar,QMetaType::Double,QMetaType::Int,QMetaType::LongLong,QMetaType::QString, またはQMetaType::ULongLong を持っている場合、 unsigned int として variant を返す。

ok が NULL でない場合:*ok の値が unsigned int に変換できる場合は true に設定され、そうでない場合は*ok が false に設定されます。

警告:警告:値がQMetaType::ULongLong に変換可能であるが、符号なし int で表現するには大きすぎる場合、その結果生じる算術オーバーフローはok に反映されない。簡単な回避策は、QString::toUInt() を使用することである。

canConvert() およびconvert()も参照の こと。

qulonglong QVariant::toULongLong(bool *ok = nullptr) const

variant が type()QMetaType::ULongLong,QMetaType::Bool,QMetaType::QByteArray,QMetaType::QChar,QMetaType::Double,QMetaType::Int,QMetaType::LongLong,QMetaType::QString,QMetaType::UInt の場合、unsigned long long int として variant を返す。

ok が NULL でない場合:*ok は、値が int に変換される可能性があれば真に設定され、そうでなければ*ok は偽に設定される。

canConvert() およびconvert()も参照のこと

QUrl QVariant::toUrl() const

variant がuserType()QMetaType::QUrl を持っていればQUrl として variant を返します ; そうでなければ無効なQUrl を返します。

canConvert() およびconvert()も参照して ください。

QUuid QVariant::toUuid() const

variant が type()QMetaType::QUuid,QMetaType::QByteArray またはQMetaType::QString を持つ場合、その variant をQUuid として返します ; そうでない場合、デフォルトで構築されたQUuid を返します。

canConvert() およびconvert()も参照して ください。

const char *QVariant::typeName() const

バリアントに格納されているデータ型の名前を返します。返される文字列は、データの格納に使われた C++ データ型を表します。 たとえば、"QFont" や "QString" あるいは "QVariantList" などです。無効な variant は 0 を返します。

template <typename T> T QVariant::value() const &

格納されている値をテンプレート型T に変換して返す。型を変換できるかどうかを調べるには、canConvert ()を呼び出します。値が変換できない場合は、デフォルトで構成された値が返されます。

TQVariant でサポートされている場合、この関数はtoString()、toInt() などとまったく同じように動作します。

QVariant v;

MyCustomStruct c;
if (v.canConvert<MyCustomStruct>())
    c = v.value<MyCustomStruct>();

v = 7;
int i = v.value<int>();                        // same as v.toInt()
QString s = v.value<QString>();                // same as v.toString(), s is now "7"
MyCustomStruct c2 = v.value<MyCustomStruct>(); // conversion failed, c2 is empty

QVariantQObject から派生した型へのポインタが格納されている場合、TQObject のどの型でもよい。QVariant に格納されたポインタがqobject_cast から T になることができれば、その結果が返される。そうでない場合はnullptr が返される。これはQ_OBJECT マクロを使用するQObject サブクラスに対してのみ機能することに注意。

QVariant にシーケンシャル・コンテナが含まれ、TQVariantList の場合、コンテナの要素はQVariantに変換され、QVariantList として返される。

QList<int>intList= {7, 11, 42}QVariantvariant=QVariant::fromValue(intList);if(variant.canConvert<QVariantList>()) { QSequentialIterableiterable=variant.value<QSequentialIterable>(); // foreach が使える:foreach(constQVariantforeach (const v,iterable) { // foreach が使える。        qDebug() << v;
    }// C++11 の range-for を使用可能: for(constQVariant&v: iterable) { の場合        qDebug() << v;
    }// イテレータを使用できるQSequentialIterable::const_iterator it=iterable.begin();constQSequentialIterable::const_iterator end=iterable.end();for( ; it!=end;++it) { } } }::const_iterator end=iterable.end(); const        qDebug() << *it;
    }

setValue()、fromValue()、canConvert()、Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()も参照のこと

template <typename T> T QVariant::view()

格納されている値に関する、T テンプレート・タイプの変更可能なビューを返します。そのようなビューがサポートされているかどうかを調べるには、canView() を呼び出します。そのようなビューが作成できない場合は、格納されている値をテンプレート型T に変換して返します。canConvert() を呼び出して、型を変換できるかどうかを調べます。値が表示も変換もできない場合は、既定で構成された値が返されます。

canView() およびQ_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()も参照してください

[noexcept] QVariant &QVariant::operator=(QVariant &&other)

Move-other をこのQVariant インスタンスに割り当てる。

QVariant &QVariant::operator=(const QVariant &variant)

この variant に variantvariant の値を割り当てます。

関連する非会員

[noexcept, since 6.6] template <typename T> T *get_if(QVariant *v)

[noexcept, since 6.6] template <typename T> const T *get_if(const QVariant *v)

vT 型のオブジェクトが含まれる場合は、含まれるオブジェクトへのポインタを返し、そうでない場合はnullptr を返す。

ミュータブルなv を取るオーバーロードは、v をデタッチする。T 型が一致するnull v で呼び出された場合、v は呼び出し後に NULL になることはない。

これらの関数はstd::variant との互換性のために提供されています。

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

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

[since 6.6] template <typename T> T &get(QVariant &v)

[since 6.6] template <typename T> T &&get(QVariant &&v)

[since 6.6] template <typename T> const T &get(const QVariant &v)

[since 6.6] template <typename T> const T &&get(const QVariant &&v)

vT 型のオブジェクトが含まれる場合、含まれるオブジェクトへの参照を返し、そうでない場合の呼び出しは未定義の動作をする。

ミュータブルなv を取るオーバーロードは、v をデタッチする。null v で、T の型が一致する場合に呼び出されると、v は、呼び出し後に NULL にならない。

これらの関数はstd::variant との互換性のために提供されています。

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

get_if() およびdata()も参照してください

[alias] QVariantHash

QHash<QString,QVariant> の同義語。

[alias] QVariantList

QList<QVariant>の対義語。

[alias] QVariantMap

QMap<QString,QVariant> の同義語。

template <typename T> T qvariant_cast(const QVariant &value)

与えられたvalue をテンプレート型T に変換して返す。

この関数はQVariant::value() と等価である。

QVariant::value()も参照してください

[since 6.7] template <typename T> T qvariant_cast(QVariant &&value)

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

与えられたvalue をテンプレート型T に変換して返します。

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

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

lhsrhs が等しい場合はfalse を返し、そうでない場合はtrue を返す。

QVariant は、type()に含まれる等号演算子を使用して等しいかどうかをチェックします。

異なる型の変種は、いくつかの例外を除いて、常に等しくないものとして比較されます:

  • 両方の型が数値型(整数や浮動小数点数)の場合、Qt は標準 C++ の型昇格ルールを使用してこれらの型を比較します。
  • 一方の型が数値型で、もう一方の型がQString の場合、Qt はQString を一致する数値型に変換しようとし、成功すればそれらを比較します。
  • 両方の型がQObject 派生型へのポインタを含んでいる場合、QVariant は、その型が関連していて、同じオブジェクトを指しているかどうかをチェックします。

QDataStream &operator<<(QDataStream &s, const QVariant &p)

バリアントp をストリームs に書き込みます。

QDataStream 演算子のフォーマットも参照してください

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

lhsrhs が等しい場合はtrue を返し、そうでない場合はfalse を返す。

QVariant は、type()に含まれる等号演算子を使用して等しいかどうかをチェックします。

異なる型の変種は、いくつかの例外を除いて、常に等しくないものとして比較されます:

  • 両方の型が数値型(整数や浮動小数点数)の場合、Qt は標準 C++ の型昇格ルールを使用してこれらの型を比較します。
  • 一方の型が数値型で、もう一方の型がQString の場合、Qt はQString を一致する数値型に変換しようとし、成功すればそれらを比較します。
  • 両方の型がQObject 派生型へのポインタを含んでいる場合、QVariant は、その型が関連していて、同じオブジェクトを指しているかどうかをチェックします。

この関数の結果は、QVariant::isNull の結果には影響されません。つまり、2つの値の一方がNULLで、もう一方がNULLでなくても、2つの値が等しくなる可能性があります。

QDataStream &operator>>(QDataStream &s, QVariant &p)

ストリームs から variantp を読み込みます。

注意: ストリームに組み込み型以外の型が含まれている場合 (QMetaType::Type を参照)、 variant を正しく読み込む前にqRegisterMetaType() またはQMetaType::registerType() を使ってそれらの型を登録する必要があります。登録されていない型が見つかった場合、QVariant はストリームに corrupt フラグを設定し、処理を停止して警告を表示します。例えば、QList<int> の場合、次のように表示されます:

QVariant::load: unknown user type with nameQList<int> と表示されます。

QDataStream演算子のフォーマットも参照してください

© 2025 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.