Qual é a maneira mais básica de fazer isso?
Qual é a maneira mais básica de fazer isso?
Respostas:
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 um std::string
em um QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? Não tenho certeza se QString
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:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Isso tem a vantagem de não usar, o .c_str()
que pode fazer com que o mesmo std::string
se copie, caso não haja lugar para adicionar o '\0'
no final.
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
Aviso: isso não funcionará se ostd::string
contiver \0
s.
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 é
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Se você não precisar lidar com essas seqüências, as respostas acima funcionarão bem.
fromLocal8Bit()
Além disso, para converter o que quiser, você pode usar a classe QVariant.
por exemplo:
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
resultado
"hello !"
"10"
"5.42"
5
Você quer dizer uma string C, como em uma char*
string ou um std::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:
char name[] = "Stack Overflow";
QString qname(name);
Para a std::string
, você obtém o char*
para o buffer e o passa para o QString
construtor:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
para empacotar o buffer primeiro e depois passá-lo ao QString
construtor.