Qt QByteArray和QVariant

QByteArray类提供了一个字节数组,它可以用来存储原始字节(包括'\0')和传统的以'\0'结尾的8位字符串。使用QByteArray比使用const char*要方便很多,在后台,它总是保证数据以'\0'结尾,而且使用隐式共享来减少内存的使用和避免不必要的数据复制。

QVariant类像是常见的Qt数据类型的一个共用体(union),一个QVariant对象在一个时间只保存一个单一类型的单一的值

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QVariant v1(15);
    qDebug()<<v1.toInt();               //15
    QVariant v2(12.3);
    qDebug()<<v2.toFloat();             //12.3
    qDebug()<<v2.toDouble();            //12.3
    QVariant v3("nihao");
    qDebug()<<v3.toString();            //nihao
    QColor color = QColor(Qt::red);
    QVariant v4 = color;
    qDebug()<<v4.type();                //QVaiant::QColor
    qDebug()<<v4.value<QColor>();       //QColor(ARGB 1,1,0,0)
    QString str = "hello";
    QVariant v5 = str;
    qDebug()<<v5.canConvert(QVariant::Int); //true,可以转换,但是要根据内容才能判断能否完成转换
    qDebug()<<v5.toString();                //hello
    qDebug()<<v5.convert(QVariant::Int);    //false,转换失败,v5被清空
    qDebug()<<v5.toString();                //0
    //QByteArray与QString转换
    QByteArray byteArray("abcd");       // 初始化
    byteArray[2] = 'd';                 //at()只读访问,速度比[]快
    QString qs = byteArray;             // qbytearray->qstring
    qDebug()<<qs;
    int arraysize = byteArray.size();
    int qssize = qs.size();
    qDebug()<<arraysize<<", "<<qssize;  //4,4
    byteArray = qs.toLatin1();          // qstring->bytearray
    qDebug()<<byteArray;
    byteArray.prepend("rock");          //前面添加
    byteArray.append("roll");           //后面添加
    byteArray.replace(4,4,"&");         //从第4个开始,连续四个字节替换为&
    qDebug()<<byteArray;                //"rock&roll"
    qDebug()<<byteArray.isEmpty();      //是否为空,false

    QByteArray bytes;
    bytes.resize(5);
    bytes[0] = '1';
    bytes[1] = '2';
    bytes[2] = '3';
    bytes[3] = '\0';
    bytes[4] = 'a';
    qs = bytes;
    qDebug()<<bytes;                    //123\x00""a"
    qDebug()<<qs;                       //123

    int n = 63;
    bytes = QByteArray::number(n);
    qDebug()<<bytes;                    //63
    bytes = QByteArray::number(n,16).toUpper();
    qDebug()<<bytes;                    //3F
    bytes = "1234.56";
    double a = bytes.toDouble();
    qDebug()<<a;                        //1234.56
    string s = bytes.toStdString();     //返回stdstring
}

Widget::~Widget()
{
    delete ui;
}

猜你喜欢

转载自blog.csdn.net/qq_24127015/article/details/83994470
今日推荐