Qt中的DataPtr用于什么?

时间:2012-11-13 07:32:17

标签: qt

QVariant::DataPtr是私有的,昨天我使用QBitArray做了一些工作。有一个函数data_ptr()返回DataPtr&,但我不知道何时以及如何使用此函数。我将返回的数据写入文件并在ST2中打开,显示SOH

int main()
{
    QBitArray bit(8);
    bit[5] = true; //--> I tried bit[7] = true; result is `SOH` still
    QFile file("out");
    file.open(QIODevice::WriteOnly);
    QDataStream outs(&file);
    outs << bit.data_ptr();
    file.close();
    return 0;
}

我知道SOHStart Of Header的含义,它被定义为0x01(1byte)用于帧分隔。首先我写了bit[7]=true;所以我认为bit.data_ptr()可能是bit中的原始数据(二进制00000001),它是封装的QBitArray。但是当我尝试bit[5]=true;并在ST2中打开文件时,它仍然显示SOH。所以我很困惑。
enter image description here

2 个答案:

答案 0 :(得分:1)

data_ptr是指向Data的指针。例如,您可以使用data_ptr将QbitArray转换为char *:

auto data = bit.data_ptr()->data(); 

所以data[0]bit的大小(这里是8),其他是bit的值。例如:

QBitArray bit(16);
bit[5] = true;
bit[14] = true;
auto data = bit.data_ptr()->data(); 

位的值为0x4020。因此data[0]为16,data[1]为0x20,而data[2]为0x40。

答案 1 :(得分:0)

DataPtr只是指向Data结构的指针。结构是私有的,所以你不应该使用它。但是,您可以使用指针来区分两个字节数组。使用QBitArray::operator<<()将位数组写入数据流。