Pregunta

Yo estaba tratando de convertir un QString a char * Tipo de los métodos siguientes, pero no parece funcionar.

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

¿Puede usted explicar la posible defecto con este método, o dar un método alternativo?

¿Fue útil?

Solución

Bueno, el Qt FAQ dice:

int main(int argc, char **argv)
{
 QApplication app(argc, argv);
  QString str1 = "Test";
  QByteArray ba = str1.toLocal8Bit();
  const char *c_str2 = ba.data();
  printf("str2: %s", c_str2);
  return app.exec();
}

Así que tal vez usted está teniendo otros problemas. ¿Cómo funciona exactamente este trabajo no?

Otros consejos

Tal vez

my_qstring.toStdString().c_str();

o más seguros, 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 forma más fácil de convertir un href="http://doc.qt.io/qt-5/qstring.html#details" rel="noreferrer"> QString a es qPrintable (QString y str) , que es una macro expandiendo a str.toLocal8Bit().constData().

La respuesta de David funciona bien si sólo se está utilizando para dar salida a un archivo o mostrar en la pantalla, pero si una función o una biblioteca requiere un char * para analizar, entonces 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);

EDITADO

De esta manera también funciona

QString str ("Something");

char* ch = str.toStdString().C_str();

Su cadena puede contener caracteres no Latin1, que conduce a los datos no definidos. Depende de lo que entendemos por "deosn't que parecen funcionar".

la correcta solución sería como esto

   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<<"<---";

Si la cadena contiene caracteres no ASCII - que es mejor hacerlo de esta manera: s.toUtf8().data() (o s->toUtf8().data())

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top