Qual é a maneira mais básica de fazer isso?
Se por string você quer dizer std::string
que pode fazê-lo com este método:
QString QString :: fromStdString (const std :: string e str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Se por string você quer dizer codificado por ASCII const char *
, pode usar este método:
QString QString :: fromAscii (const char * str, tamanho int = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Se você const char *
codificou com a codificação do sistema que pode ser lida com QTextCodec :: codecForLocale () , você deve usar este método:
QString QString :: fromLocal8Bit (const char * str, tamanho int = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
Se você possui const char *
codificação UTF8, precisará usar este método:
QString QString :: fromUtf8 (const char * str, tamanho int = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
Também existe um método para const ushort *
conter a cadeia codificada UTF16:
QString QString :: fromUtf16 (const ushort * unicode, tamanho int = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
Se compilado com compatibilidade com STL,
QString
possui um método estático para converter umstd::string
em umQString
:fonte
QString qstr = QString(str.c_str());
? Não tenho certeza seQString
copia o que é passado para ele.fromStdString
preservará estes, construindo a partir de.c_str
não. (E foi precisamente como fazer isso que me levou a essa pergunta.)Caminho alternativo:
Isso tem a vantagem de não usar, o
.c_str()
que pode fazer com que o mesmostd::string
se copie, caso não haja lugar para adicionar o'\0'
no final.fonte
.c_str()
)Aviso: isso não funcionará se o
std::string
contiver\0
s.fonte
Me deparei com essa pergunta porque tinha um problema ao seguir as respostas, então posto minha solução aqui.
Os exemplos acima mostram todos os exemplos com seqüências contendo apenas valores ASCII; nesse caso, tudo funciona bem. No entanto, ao lidar com seqüências de caracteres no Windows que também podem conter outros caracteres, como tremas alemães, essas soluções não funcionam
O único código que fornece resultados corretos nesses casos é
Se você não precisar lidar com essas seqüências, as respostas acima funcionarão bem.
fonte
fromLocal8Bit()
Além disso, para converter o que quiser, você pode usar a classe QVariant.
por exemplo:
resultado
fonte
Você quer dizer uma string C, como em uma
char*
string ou umstd::string
objeto C ++ ?De qualquer maneira, você usa o mesmo construtor, conforme documentado na referência QT:
Para uma string C regular, use o construtor principal:
Para a
std::string
, você obtém ochar*
para o buffer e o passa para oQString
construtor:fonte
QByteArray::QByteArray (const char* data, int size)
para empacotar o buffer primeiro e depois passá-lo aoQString
construtor.