Pergunta

O que é a forma mais básica de fazê-lo?

Foi útil?

Solução

Se por cadeia que std::string significa que você pode fazê-lo com este método:

QString QString :: fromStdString (const std :: string & str)

std::string str = "Hello world";
QString qstr = QString::fromStdString(str);

Se por corda que você média Ascii const char * codificado em seguida, você pode usar esse 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 * codificado com codificação sistema que pode ser lido com QTextCodec :: codecForLocale () então você deve usar esse 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ê tem const char * que é UTF8 codificado, então você vai precisar usar esse 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);

Há também método para const ushort * contendo UTF16 string codificada:

QString QString :: fromUtf16 (ushort const * 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);

Outras dicas

Se compilado com compatibilidade STL, QString tem um método estática para converter um std::string a um QString:

std::string str = "abc";
QString qstr = QString::fromStdString(str);

forma alternativa:

std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());

Isto tem a vantagem de não usar .c_str() que pode causar o std::string cópias de si mesmo no caso não há lugar para adicionar o '\0' no final.

std::string s = "Sambuca";
QString q = s.c_str();

Aviso:. Isto não vai funcionar se o std::string contém \0s

me deparei com essa pergunta, porque eu tinha um problema quando na sequência das respostas, então eu postar minha solução aqui.

Os exemplos acima todas as amostras mostram com cordas contendo apenas valores ASCII, caso em que tudo funciona bem. No entanto, quando se lida com cordas no Windows whcih também pode conter outros caracteres, como tremas alemão, em seguida, estas soluções não funcionam

O único código que dá resultados corretos nesses casos é

std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());

Se você não tem que lidar com essas cordas, em seguida, as respostas acima irá funcionar bem.

Além disso, para converter o que você 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();

saída

"hello !"
"10"
"5.42"
5

Você quer dizer uma seqüência C, como em uma corda char*, ou a ++ objeto std::string C?

De qualquer maneira, você usa o mesmo construtor, conforme documentado na referência QT:

Para uma seqüência regular C, é só usar o construtor principal:

char name[] = "Stack Overflow";
QString qname(name);

Para uma std::string, você obter o char* para o buffer e passar isso para o construtor QString:

std::string name2("Stack Overflow");
QString qname2(name2.c_str());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top