¿Cuál es la forma más básica de hacerlo?
Si por cadena quieres decir std::string
que puedes hacerlo con este método:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Si por cadena te refieres a Ascii codificado, const char *
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 ha const char *
codificado con una 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 *
codificación 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 *
contener 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);
Si se compila con compatibilidad STL,
QString
tiene un método estático para convertirstd::string
a aQString
:fuente
QString qstr = QString(str.c_str());
? No estoy seguro siQString
copia lo que se le pasa.fromStdString
preservará esto, construyendo desde.c_str
no lo hará. (Y fue precisamente cómo hacer esto lo que me llevó a esta pregunta)Manera alternativa:
Esto tiene la ventaja de no usar, lo
.c_str()
que puede hacerstd::string
que se copie solo en caso de que no haya lugar para agregarlo'\0'
al final.fuente
.c_str()
)Advertencia: Esto no funcionará si
std::string
contiene\0
s.fuente
Encontré 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
Si no tiene que lidiar con tales cadenas, las respuestas anteriores funcionarán bien.
fuente
fromLocal8Bit()
Además, para convertir lo que quieras, puedes usar la clase QVariant.
por ejemplo:
salida
fuente
¿Te refieres a una cadena C, como en una
char*
cadena, o unstd::string
objeto C ++ ?De cualquier manera, utiliza el mismo constructor, como se documenta en la referencia QT:
Para una cadena C normal, solo use el constructor principal:
Para a
std::string
, obtienes elchar*
al búfer y lo pasas alQString
constructor:fuente
QByteArray::QByteArray (const char* data, int size)
para envolver el búfer primero y luego pasarlo alQString
constructor.