QVariant类就像最常见的Qt数据类型的联合一样
Hearder #include "QVariant"
qmake QT+= core
QVariant() | |
QVariant(Type type) | |
QVariant(const QRegularExpression &re) | |
QVariant(const QUrl &val) | |
QVariant(const QEasingCurve &val) | |
QVariant(const QUuid &val) | |
QVariant(const QModelIndex &val) | |
QVariant(const QPersistentModelIndex &val) | |
QVariant(const QJsonValue &val) | |
QVariant(const QJsonObject &val) | |
QVariant(const QJsonArray &val) | |
QVariant(const QJsonDocument &val) | |
QVariant(QVariant &&other) | |
QVariant(int typeId, const void *copy) | |
QVariant(const QVariant &p) | |
QVariant(QDataStream &s) | |
QVariant(int val) | |
QVariant(uint val) | |
QVariant(qlonglong val) | |
QVariant(qulonglong val) | |
QVariant(bool val) | |
QVariant(double val) | |
QVariant(float val) | |
QVariant(const char *val) | |
QVariant(const QByteArray &val) | |
QVariant(const QBitArray &val) | |
QVariant(const QString &val) | |
QVariant(QLatin1String val) | |
QVariant(const QStringList &val) | |
QVariant(QChar c) | |
QVariant(const QDate &val) | |
QVariant(const QTime &val) | |
QVariant(const QDateTime &val) | |
QVariant(const QList<QVariant> &val) | |
QVariant(const QMap<QString, QVariant> &val) | |
QVariant(const QHash<QString, QVariant> &val) | |
QVariant(const QSize &val) | |
QVariant(const QSizeF &val) | |
QVariant(const QPoint &val) | |
QVariant(const QPointF &val) | |
QVariant(const QLine &val) | |
QVariant(const QLineF &val) | |
QVariant(const QRect &val) | |
QVariant(const QRectF &val) | |
QVariant(const QLocale &l) | |
QVariant(const QRegExp ®Exp) | |
bool | canConvert(int targetTypeId) const |
bool | canConvert() const |
void | clear() |
bool | convert(int targetTypeId) |
bool | isNull() const |
bool | isValid() const |
void | setValue(const T &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 = Q_NULLPTR) const |
QEasingCurve | toEasingCurve() const |
float | toFloat(bool *ok = Q_NULLPTR) const |
QHash<QString, QVariant> | toHash() const |
int | toInt(bool *ok = Q_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 = Q_NULLPTR) const |
QMap<QString, QVariant> | toMap() const |
QModelIndex | toModelIndex() const |
QPersistentModelIndex | toPersistentModelIndex() const |
QPoint | toPoint() const |
QPointF | toPointF() const |
qreal | toReal(bool *ok = Q_NULLPTR) const |
QRect | toRect() const |
QRectF | toRectF() const |
QRegExp | toRegExp() const |
QRegularExpression | toRegularExpression() const |
QSize | toSize() const |
QSizeF | toSizeF() const |
QString | toString() const |
QStringList | toStringList() const |
QTime | toTime() const |
uint | toUInt(bool *ok = Q_NULLPTR) const |
qulonglong | toULongLong(bool *ok = Q_NULLPTR) const |
QUrl | toUrl() const |
QUuid | toUuid() const |
Type | type() const |
const char * | typeName() const |
int | userType() const |
T | value() const |
bool | operator!=(const QVariant &v) const |
bool | operator<(const QVariant &v) const |
bool | operator<=(const QVariant &v) const |
QVariant & | operator=(const QVariant &variant) |
QVariant & | operator=(QVariant &&other) |
bool | operator==(const QVariant &v) const |
bool | operator>(const QVariant &v) const |
bool | operator>=(const QVariant &v) const |
QVariant | fromValue(const T &value) |
Type | nameToType(const char *name) |
const char * | typeToName(int typeId) |
typedef | |
typedef | |
typedef | |
T | qvariant_cast(const QVariant &value) |
bool | operator!=(const QVariant &v1, const QVariant &v2) |
bool | operator==(const QVariant &v1, const QVariant &v2) |
c++有一个可能被大家忽略的知识,就是如果一个类,使用的不是默认构造函数,是不能放到union里面去的,找了一个链接https://www.cnblogs.com/jeakeven/p/5113508.html
也因此,QT里面有许多类不能在union里面用
一个QVariant对象一次只能保存单个类型的单个值,可以用convert()去转换成其它类型,canConvert()查看是否能转换,而可以同过toT()类型的函数去获取T类型的值
我们可以ATL QList<QVariant>和QMap(QString,QVariant),所以我们可以很轻松的构造一些复杂的变量类型。
需要注意的是QVariant自己就在QtCore里面,所以无法为Core里面的类提供转换,比如QColor、QImage和QPixmap,换句话说,就是没有toColor()这类函数。
但是我们可以使用QVariant::value()或者qvariant_cast()这种模板函数。比如:
QVariant variant;
... QColor color = variant.value<QColor>();
而你变换则是自动的,相当于隐式转换
QColor color = palette().background().color();
QVariant variant = color;
有时候会出现一种情况就是canConvert() 返回true,但是Convert()返回false,这是因为,canConvert只是检查两种类型是否能转换,但是你赋的值可能不允许转换