QVariantクラス

3027 ワード

詳細:
QVariantクラスは最も一般的なQtデータ型の結合である.
c++はコンストラクタと析出関数のない連合体を禁止するため,多くの継承Qtクラスは連合体では使用できない.(連合体の中の変数は1つの記憶領域を共用している),連係変数がなくなったため,物体属性やデータベースの作業など多くの面で悩まされている.
QVariantオブジェクトは、1つの時間に1つのタイプの値しか保持されません.canConvertを使用して、現在のタイプを変換できるかどうかを問い合わせることができます.変換タイプは一般的にtoT()で命名されます.
QVariantの使い方を説明するexampleを抜粋しました.
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;