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() | |
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 は、QMetaType::Type enum で言及されている以外の型をサポートするように拡張することができます。詳細は「カスタム Qt タイプの作成」を参照してください。
GUI型に関する注意
QVariant はQt Core モジュールの一部であるため、QColor 、QImage 、QPixmap のような、Qt GUI で定義されたデータ型への変換関数を提供することはできません。言い換えれば、toColor()
関数はありません。代わりに、QVariant::value() またはqvariant_cast() テンプレート関数を使用できます。例えば
逆変換(例えば、QColor から QVariant への変換)は、GUI 関連の型を含め、QVariant がサポートするすべてのデータ型に対して自動的に行われます:
canConvert()と convert() の連続使用
canConvert() とconvert() を連続して使用すると、canConvert() は真を返しますが、convert() は偽を返すことがあります。これは一般的に、canConvert() は、適切なデータが与えられた場合に、QVariant が型間で変換する一般的な能力を報告するだけであるためです。
例えば、canConvert(QMetaType::fromType<int>())
は文字列を含むバリアントで呼び出されると真を返します。なぜなら、原理的に QVariant は数値の文字列を整数に変換できるからです。しかし、文字列に数字以外の文字が含まれている場合、それを整数に変換することはできず、変換しようとしても失敗します。したがって、変換に成功した場合に両方の関数がtrueを返すようにすることが重要です。
QMetaTypeも参照のこと 。
メンバ関数ドキュメント
variant に格納されている値の格納タイプを返します。これはmetaType().id() と同じです。
metaType()も参照してください 。
含まれるオブジェクトへのポインタを、書き込めない汎用 void* として返す。
[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 型のバリアントを構築し、copy がnullptr
でない場合は*copy
のコピーで初期化する(この場合、copy はtype 型のオブジェクトを指す必要がある)。
格納したいオブジェクトのアドレスを渡さなければならないことに注意。
通常はこのコンストラクタを使う必要はなく、代わりにQMetaType::VoidStar
、QMetaType::QObjectStar
で表されるポインタ型からバリアントを構築するためにQVariant::fromValue() を使います。
type がコピー構築に対応しておらず、copy がnullptr
でない場合、バリアントは無効となる。同様に、copy がnullptr
で、type がデフォルト構築をサポートしていない場合、バリアントは無効となる。
QVariant::fromMetaType 、QVariant::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)...
で初期化されます。
このオーバーロードは、T
がargs から構築できる場合にのみ、オーバーロード解決に参加します。
このコンストラクタは、STL/std::any との互換性のために提供されています。
これはオーバーロードされた関数です。
この関数は Qt 6.6 で導入されました。
注意: is_noexcept_constructible<q20::remove_cvref_t<T>, Args...>::value
がtrue
の場合、この関数は 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...
>::value
がtrue
の場合、この関数は 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)
lhs とrhs のオブジェクトの順序を比較する。
比較がサポートされていないか、値が順序付けされていない場合はQPartialOrdering::Unordered を返す。そうでない場合は、lhs がrhs より小さいか、同等か、大きい場合に、それぞれQPartialOrdering::Less 、QPartialOrdering::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)
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 になることはない。
[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 型のバリアントを作成し、copy がnullptr
でない場合は*copy
のコピーで初期化する(この場合、copy はtype 型のオブジェクトを指す必要がある)。
格納したいオブジェクトのアドレスを渡さなければならないことに注意。
通常はこのコンストラクタを使う必要はなく、代わりにQMetaType::VoidStar
、QMetaType::QObjectStar
で表されるポインタ型からバリアントを構築するためにQVariant::fromValue() を使います。
type がコピー構築に対応しておらず、copy がnullptr
でない場合、バリアントは無効となる。同様に、copy がnullptr
であり、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);
[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 のコピーを格納する。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)
このバリアントを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 ()を呼び出します。値が変換できない場合は、デフォルトで構成された値が返されます。
型T
がQVariant でサポートされている場合、この関数は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
QVariant にQObject から派生した型へのポインタが格納されている場合、T
はQObject のどの型でもよい。QVariant に格納されたポインタがqobject_cast から T になることができれば、その結果が返される。そうでない場合はnullptr
が返される。これはQ_OBJECT マクロを使用するQObject サブクラスに対してのみ機能することに注意。
QVariant にシーケンシャル・コンテナが含まれ、T
がQVariantList の場合、コンテナの要素は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)
v にT
型のオブジェクトが含まれる場合は、含まれるオブジェクトへのポインタを返し、そうでない場合は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)
v にT
型のオブジェクトが含まれる場合、含まれるオブジェクトへの参照を返し、そうでない場合の呼び出しは未定義の動作をする。
ミュータブルなv を取るオーバーロードは、v をデタッチする。null v で、T
の型が一致する場合に呼び出されると、v は、呼び出し後に NULL にならない。
これらの関数はstd::variant
との互換性のために提供されています。
この関数は Qt 6.6 で導入されました。
[alias]
QVariantHash
[alias]
QVariantList
[alias]
QVariantMap
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)
lhs とrhs が等しい場合は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)
lhs とrhs が等しい場合は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.