标签: qbytearray

在Qt中从QByteArray加载QPixmap?

我有一个包含图像内容的字节数组(以png/bmp或其他格式).

如何将其加载到QPixmap中?

c++ qt qpixmap qbytearray

7
推荐指数
2
解决办法
2万
查看次数

QBitArray到QByteArray

当我们用这个文本"ali ata bak"创建一个文本文件时,我们使用这个文件作为程序的输入.代码正常运行.但是当我们在文本文件中输入"1111111111111111111111"这个文本时,Code没有运行预期.那有什么问题呢?

#include <QtCore/QCoreApplication>
#include <QBitArray>
#include <QByteRef>
#include <QFile>
#include <iostream>
#include <stdlib.h>
#include <QTextStream>

// Buffer Size #num of KB's
#define BUFFER_SIZE_KB 1

// Do not change !!
#define BUFFER_SIZE_BYTE BUFFER_SIZE_KB*1024
#define BUFFER_SIZE_BIT  BUFFER_SIZE_BYTE*8

using namespace std;


QBitArray bytesToBits(QByteArray bytes) {
    QBitArray bits(bytes.count()*8);
    // Convert from QByteArray to QBitArray
    for(int i=0; i<bytes.count(); ++i)
        for(int b=0; b<8; ++b)
            bits.setBit(i*8+b, bytes.at(i)&(1<<b));
    return bits;
}


QByteArray bitsToBytes(QBitArray bits) {
    QByteArray bytes;
    bytes.resize(bits.count()/8);
    // Convert from QBitArray to QByteArray
    for(int b=0; …
Run Code Online (Sandbox Code Playgroud)

c++ qt qbytearray

7
推荐指数
1
解决办法
6134
查看次数

使用UTF-8或Latin1编码将QString转换为QByteArray

我想将QString转换为utf8或latin1 QByteArray,但今天我将所有内容都视为utf8.

而我正在使用高于0x7f的latin1的较高段中的一些字符来测试它,其中德语ü是一个很好的例子.

如果我喜欢这样:

QString name("\u00fc"); // U+00FC = ü
QByteArray utf8;
utf8.append(name);
qDebug() << "utf8" << name << utf8.toHex();

QByteArray latin1;
latin1.append(name.toLatin1());
qDebug() << "Latin1" << name << latin1.toHex();

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-1");
QByteArray encodedString = codec->fromUnicode(name);
qDebug() << "ISO 8859-1" << name << encodedString.toHex();
Run Code Online (Sandbox Code Playgroud)

我得到以下输出.

utf8 "ü" "c3bc" 
Latin1 "ü" "c3bc" 
ISO 8859-1 "ü" "c3bc" 
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我到处都得到了unicode 0xc3bc,我希望在第2步和第3步得到Latin1 0xfc.

我的猜测是我应该得到这样的东西:

utf8 "ü" "c3bc" 
Latin1 "ü" "fc" 
ISO 8859-1 "ü" "fc" 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

/谢谢


链接到一些字符表:


此代码是在基于Ubuntu 10.04的系统上构建和执行的.

$> …
Run Code Online (Sandbox Code Playgroud)

c++ qt utf-8 latin1 qbytearray

6
推荐指数
1
解决办法
2万
查看次数

将QByteArray转换为std :: vector <unsigned char>

我试图转换QByteArraystd::vector<unsigned char>使用此代码:

unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData();
std::vector<unsigned char>::size_type size = strlen((const char*)buffer);
std::vector<unsigned char> bufferToCompress(buffer, buffer + size);
Run Code Online (Sandbox Code Playgroud)

但是,假设这byteArrayBuffer是一个QByteArray充满数据,我认为它在线上不能很好地工作,unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData();因为byteArrayBuffer.size()返回的值不同于bufferToCompress.size().

我怎样才能让它运转起来?

c++ vector std unsigned-char qbytearray

6
推荐指数
1
解决办法
8950
查看次数

QByteArray与reserve()的内部重新分配行为

我只是试图优化一些通信堆栈.我使用的是Qt 5.3.2/VS2013.

堆栈使用QByteArray作为数据缓冲区.我打算在数据大小增加时使用capacity()reserve()方法来减少不必要的内部缓冲区重新分配.然而,QByteArray的行为结果是不一致的.保留的空间有时似乎被隐含地挤压了.

我可以提取以下演示,应用字符串追加,字符串赋值和附加到三个缓冲区的字符.这些单个操作似乎保留了内部缓冲区大小(使用获得capacity()).但是,当将这三个操作中的每一个应用于同一QByteArray时,保留的大小会发生变化.这种行为对我来说是随机的:

QByteArray x1; x1.reserve(1000);
x1.append("test");
qDebug() << "x1" << x1.capacity() << x1;

QByteArray x2; x2.reserve(1000);
x2 = "test";
qDebug() << "x2" << x2.capacity() << x2;

QByteArray x3; x3.reserve(1000);
x3.append('t');
qDebug() << "x3" << x3.capacity() << x3;

QByteArray x4; x4.reserve(1000);
x4.append("test");
x4.append('t');
x4 = "test";
qDebug() << "x4" << x4.capacity() << x4;
Run Code Online (Sandbox Code Playgroud)

预期的产出是:

x1 1000 "test"
x2 1000 "test"
x3 1000 "t"
x4 1000 "test"
Run Code Online (Sandbox Code Playgroud)

但实际输出是:

x1 1000 "test"
x2 1000 "test" …
Run Code Online (Sandbox Code Playgroud)

c++ qt memory-management qbytearray

6
推荐指数
1
解决办法
936
查看次数

QByteArray在QML中转换成什么?

如果我有

signal:
    void foo(QByteArray data);
Run Code Online (Sandbox Code Playgroud)

在QML中我处理它:

 onFoo: {
     console.log(data.toString());
 }
Run Code Online (Sandbox Code Playgroud)

QML中的数据类型是什么?它有什么方法?它似乎不是一个javascript字符串 - 它甚至没有.length,而且没有.charCodeAt().但它似乎也不是QByteArray- 不.at().data[0]undefined!它确实.toString().

我如何访问其内容?例如,如果它是一个四字节uint32_t,我如何将该数字转换为javascript变量?

javascript qt qml qbytearray

6
推荐指数
2
解决办法
3012
查看次数

如何有效地对 QByteArray 进行分区?

我想有效地对 QByteArray 消息进行分区,因此我实现的这个函数采用字节(我想要提取的部分)和 toEnd 标志,该标志告诉我是否要提取第 1 部分直到数组末尾。我的直径是 spcae ' '

例如,如果我有:

ba = "HELLO HOW ARE YOU?"
ba1 = getPart(ba, 1, false) -> ba1 = "HELLO"
ba2 = getPart(ba, 2, true) -> ba2 = "HOW ARE YOU?"
ba3 = getPart(ba, 3, false) -> ba3 = "ARE"
Run Code Online (Sandbox Code Playgroud)

下面的函数工作得很好,但我想知道这是否有效。我应该考虑使用 split 函数吗?

QByteArray Server::getPart(const QByteArray message, int part, bool toEnd)
{
    QByteArray string;
    int startsFrom = 0;
    int endsAt = 0;
    int count = 0;
    for(int i = 0; i < message.size(); i++) …
Run Code Online (Sandbox Code Playgroud)

string qstring qt substring qbytearray

5
推荐指数
1
解决办法
2万
查看次数

在调试过程中如何查看 Qt 对象 QByteArray 的内容?

我的程序使用一些 QByteArray 类型的变量来包含数据(字节)。这些字节可能是特殊字符,如“\0”、1、...,所以在调试时我看不到特殊字符之后的所有元素。如果我使用 std::vector,我可以看到所有元素。我必须使用 QByteArray,但在调试时无法看到该变量的所有元素。请帮助我,请!谢谢!

示例:QByteArray bytes(4, '\0'); 现在,如果调试,我只会看到“”。但我想看到“'\0','\0','\0','\0'”或类似的东西。

我对 QDateTime 也有同样的问题。但我通过此帮助解决了:http://www.qtcentre.org/threads/32336-View-QDate-and-QDateTime-in-VisualStudio-debugger

此链接可能有帮助,但这不能解决我的问题:http://qt-project.org/wiki/IDE-debug-helpers

例子:

QByteArray ba("Hello"); //debuging, see: ba = "Hello"     
ba.append('\0');     
ba.append("a message"); //we just see: ba = "Hello"   
Run Code Online (Sandbox Code Playgroud)

c++ qt visual-studio-2010 visual-studio-debugging qbytearray

5
推荐指数
1
解决办法
9234
查看次数

QbyteArray数据副本

我有两个QByteArray,sData而且dData.

我要复制n从位置字节xdData,即&dData[x]以位置ysData&sData[y].

在C中,数组副本由.完成 memcpy(&dData[x], &sData[y], n);

如何复制以上数据QByteArray在Qt中完成?

qt qbytearray

5
推荐指数
2
解决办法
1万
查看次数

Qt QString to QByteArray and back

I have a problem with tranformation from QString to QByteArray and then back to QString:

int main() {

    QString s;

    for(int i = 0; i < 65536; i++) {
        s.append(QChar(i));
    }

    QByteArray ba = s.toUtf8();

    QString s1 = QString::fromUtf8(ba);

    if(areSame(s, s1)) {
        qDebug() << "OK";
    } else {
       qDebug() << "FAIL";
       outputErrors(s, s1);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

As you can see I fill QString with all characters that are within 16bit range. and then convert them to QByteArray (Utf8) and …

c++ qstring qt qbytearray

5
推荐指数
2
解决办法
5373
查看次数