Pregunta

¿Cuál es la forma más básica de hacerlo?

¿Fue útil?

Solución

Si por cadena te refieres a std :: string puedes hacerlo con este método:

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

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

Si por cadena te refieres a const char * codificado en Ascii, entonces puedes usar este método:

QString QString :: fromAscii (const char * str, int size = -1 )

const char* str = "Hello world";
QString qstr = QString::fromAscii(str);

Si tiene const char * codificado con codificación del sistema que se puede leer con QTextCodec :: codecForLocale () , entonces debe usar este método:

QString QString :: fromLocal8Bit (const char * str, int size = -1 )

const char* str = "zażółć gęślą jaźń";      // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);

Si tiene const char * que está codificado en UTF8, deberá utilizar este método:

QString QString :: fromUtf8 (const char * str, int size = -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);

También hay un método para const ushort * que contiene una cadena codificada UTF16:

QString QString :: fromUtf16 (const ushort * unicode, int size = -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);

Otros consejos

Si se compila con compatibilidad STL, QString tiene un método estático para convertir un std :: string en un 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());

Esto tiene la ventaja de no utilizar .c_str () , lo que puede hacer que std :: string se copie solo en caso de que no haya lugar para agregar el '\ 0' al final.

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

Advertencia: Esto no funcionará si el std :: string contiene \ 0 s.

Me encontré con esta pregunta porque tenía un problema al seguir las respuestas, así que publico mi solución aquí.

Todos los ejemplos anteriores muestran muestras con cadenas que contienen solo valores ASCII, en cuyo caso todo funciona bien. Sin embargo, cuando se trata de cadenas en Windows que también pueden contener otros caracteres, como diéresis alemanas, estas soluciones no funcionan

El único código que da resultados correctos en tales casos es

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

Si no tiene que lidiar con tales cadenas, las respuestas anteriores funcionarán bien.

Además, para convertir lo que quieras, puedes usar la clase QVariant.

por ejemplo:

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();

salida

"hello !"
"10"
"5.42"
5

¿Te refieres a una cadena C, como en una cadena char * , o un objeto C ++ std :: string ?

De cualquier manera, utiliza el mismo constructor, como se documenta en la referencia QT:

Para una cadena C normal, solo use el constructor principal:

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

Para un std :: string , se obtiene el char * al búfer y se lo pasa al constructor QString :

std::string name2("Stack Overflow");
QString qname2(name2.c_str());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top