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;
}