¿Cuál es la forma más básica de hacerlo?¿Cómo cambiar la cadena en QString?
Respuesta
Si por la cadena que quiere decir std::string
se puede hacer con este método:
QString QString::fromStdString(const std::string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Si por la cadena que quiere decir ASCII codificados const char *
a continuación, puede utilizar 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 la codificación del sistema que se pueden leer con QTextCodec::codecForLocale(), entonces debería 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 es UTF8 codificada 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 método para const ushort *
contiene UTF16 cadena codificada:
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á i f el std::string
contiene \0
s.
No funciona con '\ 0' integrado. –
Tampoco es seguro para Unicode. –
¿Quiere decir una cadena C, como en una cadena char*
, o un objeto C++ std::string
?
De cualquier manera, se utiliza el mismo constructor, tal como se documenta en la referencia QT:
Para una cadena C regular, sólo tiene que utilizar el constructor principal:
char name[] = "Stack Overflow";
QString qname(name);
Para un std::string
, obtenga el char*
en el búfer y páselo al QString
constructor:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
El ejemplo 'std :: string' no funciona con' '0 incrustado. –
Cierto, aunque el OP no mencionó los NULL incorporados. Si es necesario, puede usar 'QByteArray :: QByteArray (const char * data, int size)' para envolver primero el buffer y luego pasarlo al constructor 'QString'. – gavinb
Si compilado con compatibilidad STL, QString
tiene una static method para convertir un std::string
a un QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
Esta debería ser la respuesta aceptada. –
Esto realmente debería evitarse en mi opinión. Si la versión de la biblioteca estándar QT fue compilada de alguna manera es diferente de la que está compilando, tendrá problemas. In crea una dependencia innecesaria entre QT y libstdC++ que no existe en ningún otro lugar en QT. – shoosh
@shoosh: Para evitar eso, ¿podría uno simplemente hacer 'QString qstr = QString (str.c_str());'? No estoy seguro de si 'QString' copia lo que le pasó. – Claudiu
manera 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 causar el std::string
a c opy en caso de que no haya lugar para agregar el '\0'
al final.
Gracias por la pista sobre la posible copia oculta con .c_str(). – Trass3r
Con C++ 11, esto ya no es una preocupación (copia oculta con '.c_str()') –
Antes de C++ 11, la posible copia oculta era una posibilidad puramente teórica: ninguna implementación realmente lo hizo. –
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 lo que se agradece de Windows también pueden contener otros caracteres, como diéresis alemanas, a continuación, estas soluciones no funcionan
El único código que da resultados correctos en estos casos es
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Si no tiene que lidiar con tales cadenas, entonces las respuestas anteriores funcionarán bien.
Además, para convertir lo que desee, puede utilizar 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
- 1. QString División
- 2. ¿Cómo crear QString en PyQt4?
- 3. ¿Cómo cambiar 1 char en la cadena?
- 4. ¿cuál es la diferencia entre QString :: sprintf y QString :: arg en Qt?
- 5. Convierte bool en QString
- 6. Cómo convertir int a QString?
- 7. Cómo reemplazar '/' con '\\' usando QString replace()?
- 8. Qt. obtener parte de QString
- 9. Convertir std :: string en QString
- 10. ¿Cuál es la equivalencia de QString :: arg() en QML
- 11. ¿Cómo escribir un QString en varias líneas?
- 12. error LNK2001: símbolo externo sin resolver "__declspec (dllimport) public: clase QString & __thiscall QString :: operator = (clase QString &&)"
- 13. secuencia de escape? usando comillas en Qstring
- 14. Cómo devolver una referencia QString const en caso de error?
- 15. cómo convertir std :: string a QString
- 16. Cómo convertir QString a std :: string?
- 17. cómo inicializar un QString a nulo?
- 18. Eliminar acentos de un QString
- 19. Salida QVector3D a QString
- 20. ¿Qué está haciendo QString :: toUtf8?
- 21. conversión de QString a char *
- 22. Conversión incorrecta de doble a QString en Qt en ARM
- 23. ¿Cómo puedo convertir QVariant en QString y viceversa en Qt?
- 24. Convierta WCHAR en QString en Qt
- 25. Uso de std :: string y QString indistintamente
- 26. ventaja de QString en std :: string
- 27. La cadena no puede cambiar. Pero int, char puede cambiar
- 28. ¿Cómo elimino los espacios en blanco finales de un QString?
- 29. Conversión de QString a char *
- 30. no puedo encontrar QString en PySide 1.1.0
Usted no quiere construir el QString con 'nueva'. – rohanpm
@Rohan - Gracias por tu comentario. Estoy eliminando esto de mi respuesta. –
No responde la pregunta. – CCoder