c++ - sort - ¿Cómo cambiar la cadena en QString?
tostring qt (7)
¿Cuál es la forma más básica de hacerlo?
¿Quiere decir 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 de QT:
Para una cadena C normal, solo usa el constructor principal:
char name[] = "";
QString qname(name);
Para std::string
, QString
el char*
en el búfer y lo pasas al constructor QString
:
std::string name2("");
QString qname2(name2.c_str());
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
Forma alternativa:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Esto tiene la ventaja de no usar .c_str()
que podría hacer que std::string
copie a sí mismo en caso de que no haya lugar para agregar el ''/0''
al final.
Me encontré con esta pregunta porque tuve 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.
Si se compila con la compatibilidad de 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);
Si con una cadena te refieres a std::string
, puedes hacerlo con este método:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Si con una 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 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 tienes const char *
codificado en UTF8, entonces necesitarás usar 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 *
contiene cadena codificada en 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);
std::string s = "Sambuca";
QString q = s.c_str();
Advertencia: Esto no funcionará si std::string
contiene /0
s.