c++ - float - Conversión de QString a char*
qstring to string (7)
Bueno, las preguntas frecuentes de Qt dicen:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QString str1 = "Test";
QByteArray ba = str1.toLatin1();
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
return app.exec();
}
Entonces quizás estés teniendo otros problemas. ¿Cómo exactamente esto no funciona?
Intenté convertir un QString en un tipo * por los siguientes métodos, pero parece que no funcionan.
//QLineEdit *line=new QLineEdit();{just to describe what is line here}
QString temp=line->text();
char *str=(char *)malloc(10);
QByteArray ba=temp.toLatin1();
strcpy(str,ba.data());
¿Puedes elaborar el posible error con este método o dar un método alternativo?
La forma más sencilla de convertir un QString en char * es qPrintable (const QString & str) , que es una macro que se expande a str.toLocal8Bit().constData()
.
La respuesta de David funciona bien si solo la está usando para enviar a un archivo o mostrar en la pantalla, pero si una función o biblioteca requiere un * char * para el análisis, este método funciona mejor:
// copy QString to char*
QString filename = "C:/dev/file.xml";
char* cstr;
string fname = filename.toStdString();
cstr = new char [fname.size()+1];
strcpy( cstr, fname.c_str() );
// function that requires a char* parameter
parseXML(cstr);
Su cadena puede contener caracteres no latinos1, lo que conduce a datos no definidos. Depende de lo que quieras decir con "parece que no funciona".
Tal vez
my_qstring.toStdString().c_str();
o más seguro, como señala Federico:
std::string str = my_qstring.toStdString();
const char* p = str.c_str();
Está lejos de ser óptimo, pero hará el trabajo.
la solución correcta sería así
QString k;
k = "CRAZYYYQT";
char ab[16];
sprintf(ab,"%s",(const char *)((QByteArray)(k.toLatin1()).data()) );
sprintf(ab,"%s",(const char *)((QByteArray)(k.toStdString()).data()));
sprintf(ab,"%s",(const char *)k.toStdString().c_str() );
qDebug()<<"--->"<<ab<<"<---";
EDITADO
de esta manera también funciona
QString str ("Something");
char* ch = str.toStdString().C_str();