QVariant類學習(非常強大的類型,甚至能處理QMap


詳細描述:

QVariant類作為一個最為普遍的Qt數據類型的聯合。

因為c++禁止沒有構造函數和析構函數的聯合體,許多繼承的Qt類不能夠在聯合體當中使用。(聯合體當中的變量共用一個存儲區),沒有了聯合變量,我們在物體屬性以及數據庫的工作等方面受到很多的困擾。

一個QVariant對象在一個時間內只保留一種類型的值。我們可以使用canConvert來查詢是否能夠轉換當前的類型。轉換類型一般以toT()命名。

 

摘錄了一個example來說明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("hello"); // The variant now contains a QByteArray 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 hold the value 223 v = QVariant(QStringList());
你甚至可以存儲QList<QVariant>和QMap<QString ,QVariant>.所以你可以構造任意復雜的任意的數據類型。這個是非常強大而且又有
用的。QVariant也支持null值,你可以定義一個沒有任何值的類型,然而,也要注意QVariant類型只能在他們有值的時候被強制轉換。
QVariant x, y(QString()), z(QString(""));
 x.convert(QVariant::Int);
 // x.isNull() == true
 // y.isNull() == true, z.isNull() == false
因為QVariant是QtCore庫的一部分,它不能夠提供定義在QtGui當中的類型的轉換,如QColor,QImage,he QPixmap等。換句話說,沒
有toColor()這樣的函數。取代的,你可以使用QVariant::value()或者qVariantValue()這兩個模板函數。
 QVariant variant;
 ...
 QColor color = variant.value<QColor>();
反向轉換(如把QColor轉成QVariant)是自動完成的。也包含了GUI相關的那些數據類型。
QColor color=palette().background().color();
QVariant variant=color;

 

http://blog.csdn.net/madao123/article/details/5938654


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM