qstringlist float c++ qt qstring qtcore

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