我有一个包含图像内容的字节数组(以png/bmp或其他格式).
如何将其加载到QPixmap中?
当我们用这个文本"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) 我想将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) 我试图转换QByteArray为std::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().
我怎样才能让它运转起来?
我只是试图优化一些通信堆栈.我使用的是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) 如果我有
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变量?
我想有效地对 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) 我的程序使用一些 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
我有两个QByteArray,sData而且dData.
我要复制n从位置字节x中dData,即&dData[x]以位置y的sData即&sData[y].
在C中,数组副本由.完成 memcpy(&dData[x], &sData[y], n);
如何复制以上数据QByteArray在Qt中完成?
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 …