QVariant Class

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

Header: #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の使い方を示すサンプルコードです:

QDataStream out(...);
QVariant v(123);                // The variant now contains an int
int x = v.toInt();              // x = 123
out << v;                       // Writes a type tag and an int to out
v = QVariant(tr("hello"));      // The variant now contains a QString
int y = v.toInt();              // y = 0 since v cannot be converted to an int
QString s = v.toString();       // s = tr("hello")  (see QObject::tr())
out << v;                       // Writes a type tag and a QString to out
...
QDataStream in(...);            // (opening the previously written stream)
in >> v;                        // Reads an Int variant
int z = v.toInt();              // z = 123
qDebug("Type is %s",            // prints "Type is int"
        v.typeName());
v = v.toInt() + 100;            // The variant now holds the value 223
v = QVariant(QStringList());    // The variant now holds a 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

バリアントに格納されている値の格納型を返します。これは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 を持つ新しいバリアントを構築します。 このバリアントは、入力val の UTF-8 エンコーディングを仮定して、val のディープコピーを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)

long long integer 値を持つ新しいバリアントを構築します、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...>::value" が真でも例外をスローしません。

[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... >::value "が真である場合、例外をスローしません。

[noexcept] QVariant::QVariant(QDate val)

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

QVariant::QVariant(QLatin1StringView val)

val で表示される Latin-1 文字列からQString の値を持つ新しい variant を構築します。

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(int) * 4>" が true のときは例外をスローしません。

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(qreal) * 4>" が真のときは例外をスローしません。

[noexcept] QVariant::QVariant(QPoint val)

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

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(qreal) * 2>" が true のときは例外をスローしません。

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(int) * 4>" が真のとき、例外をスローしません。

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(qreal) * 4>" が真のとき、例外をスローしません。

[noexcept] QVariant::QVariant(QSize val)

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

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(qreal) * 2>" が true のときは例外をスローしません。

[noexcept] QVariant::QVariant(QTime val)

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

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

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

注意: この関数は、"Private::FitsInternalSize<16>" が true のときは例外をスローしません。

[noexcept] QVariant::QVariant(bool val)

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

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

ビット配列値で新しい variant を構築します、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)

QVariant val のハッシュを持つ新しいバリアントを構築します。

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

json 配列値で新しい variant を構築します、val

QVariant::QVariant(const QJsonDocument &val)

json ドキュメント値で新しい variant を構築します、val

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

json オブジェクト値を持つ新しいバリアントを構築します、val

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

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

注意: この関数は、"Private::FitsInternalSize<sizeof(CborValueStandIn)>" が true の場合は例外をスローしません。

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

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

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

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

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

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

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

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

注意: この関数は "Private::FitsInternalSize<8 + 2 * sizeof(quintptr)>" が true のときは例外をスローしません。

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 を持つ新しい variant を構築します。

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

url 値val で新しい 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 のミュータブルビューが作成できる場合は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::Equivalent またはQPartialOrdering::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)

バリアントを要求された型targetType にキャストします。キャストができない場合、バリアントは要求された型に変更されますが、QVariant(Type) で構築されたものと同様のクリアされたヌル状態のままになります。

バリアントの現在の型が正常にキャストされた場合は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 のアクティブなバリアントの型と値を持つ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

バリアントに格納されている値の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 のコピーを格納します。T が、QVariant がサポートしていない型の場合、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)

variantother をこの variant と入れ替えます。この操作は非常に高速で、失敗することはありません。

QBitArray QVariant::toBitArray() const

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

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 のいずれかを持ち、その小文字の内容が空、"0"、"false" のいずれかでない場合はtrue を返します。

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

QByteArray QVariant::toByteArray() const

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

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

QChar QVariant::toChar() const

QCharバリアントがuserType()QMetaType::QChar,QMetaType::Int,QMetaType::UInt のいずれかを持つ場合、バリアントをQChar として返します。

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

QDate QVariant::toDate() const

variant がuserType()QMetaType::QDate,QMetaType::QDateTime,QMetaType::QString の場合、variant をQDate として返します。

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

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

QDateTime QVariant::toDateTime() const

variant がuserType()QMetaType::QDateTime,QMetaType::QDate,QMetaType::QString のいずれかである場合、その variant をQDateTime として返します。

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 を返す。

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

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

QEasingCurve QVariant::toEasingCurve() const

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

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 で返します。

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 で返します。

ok がnullでない場合:*ok の値がintに変換できた場合はtrueに設定される。そうでない場合は*ok がfalseに設定される。

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

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

QJsonArray QVariant::toJsonArray() const

QJsonArrayvariant がuserType()QJsonArray を持っている場合、その variant をQJsonArray として返します。

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

QJsonDocument QVariant::toJsonDocument() const

QJsonDocumentバリアントがuserType()QJsonDocument を持っている場合、バリアントをQJsonDocument として返します。

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

QJsonObject QVariant::toJsonObject() const

QJsonObjectバリアントがuserType()QJsonObject を持っている場合、バリアントをQJsonObject として返します。

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

QJsonValue QVariant::toJsonValue() const

QJsonValueバリアントがuserType()QJsonValue を持っている場合、バリアントをQJsonValue として返します。

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

QLine QVariant::toLine() const

QLinevariant がuserType()QMetaType::QLine を持っている場合、その variant をQLine として返します。

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

QLineF QVariant::toLineF() const

QLineFvariant がuserType()QMetaType::QLineF を持っている場合、variant をQLineF として返します。

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

QList<QVariant> QVariant::toList() const

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

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

QLocale QVariant::toLocale() const

バリアントがuserType()QMetaType::QLocale を持っている場合、バリアントをQLocale として返します ; そうでない場合、無効な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 で返します。

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

バリアントがuserType()QModelIndex を持っている場合はQModelIndex としてバリアントを返します ; そうでない場合はデフォルトで構築されたQModelIndex を返します。

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

QPersistentModelIndex QVariant::toPersistentModelIndex() const

QPersistentModelIndexバリアントがuserType()QPersistentModelIndex を持っている場合、そのバリアントをQPersistentModelIndex として返します。

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

QPoint QVariant::toPoint() const

QPointバリアントがuserType()QMetaType::QPoint またはQMetaType::QPointF を持っている場合、そのバリアントをQPoint として返します。

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

QPointF QVariant::toPointF() const

QPointFvariant がuserType()QMetaType::QPoint またはQMetaType::QPointF を持っている場合、variant をQPointF として返します。

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

QRectFvariant がuserType()QMetaType::QRect またはQMetaType::QRectF を持っている場合、その variant をQRectF として返します。

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

QRegularExpression QVariant::toRegularExpression() const

QRegularExpressionvariant がuserType()QRegularExpression を持っている場合、variant をQRegularExpression として返します。

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

QSize QVariant::toSize() const

QSizevariant がuserType()QMetaType::QSize を持っている場合、その variant をQSize として返します。

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

QSizeF QVariant::toSizeF() const

QSizeFvariant がuserType()QMetaType::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 のいずれかである場合、その variant をQTime として返します。

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 のいずれかである場合、その variant を unsigned int で返す。

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 の場合、その variant を unsigned long long int で返す。

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

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

QUrl QVariant::toUrl() const

variant がuserType()QMetaType::QUrl を持っている場合はQUrl として variant を返します ; そうでない場合は無効なQUrl を返します。

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

QUuid QVariant::toUuid() const

QUuidvariant が type()QMetaType::QUuid,QMetaType::QByteArray またはQMetaType::QString を持っている場合、 variant を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};

QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
    QSequentialIterable iterable = variant.value<QSequentialIterable>();
    // Can use foreach:
    foreach (const QVariant &v, iterable) {
        qDebug() << v;
    }
    // Can use C++11 range-for:
    for (const QVariant &v : iterable) {
        qDebug() << v;
    }
    // Can use iterators:
    QSequentialIterable::const_iterator it = iterable.begin();
    const QSequentialIterable::const_iterator end = iterable.end();
    for ( ; it != end; ++it) {
        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 の値をこのバリアントに割り当てます。

関連する非メンバー

[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 を一致する数値型に変換しようとし、成功すればそれらを比較します。
  • 両方の variant が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 でなくても、等しくなる可能性があります。

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

ストリームs からバリアントp を読み込みます。

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

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

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

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