Transformation de QString en char *

j'essayais de convertir un QString en char* par les méthodes suivantes, mais elles ne semblent pas fonctionner.

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

pouvez-vous élaborer le défaut possible avec cette méthode, ou donner une méthode alternative?

68
demandé sur lpapp 2010-03-26 16:59:33

7 réponses

bien, le QT FAQ dit:

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

alors peut-être que vous avez d'autres problèmes. Comment exactement ne fait pas ce travail?

92
répondu Eli Bendersky 2017-01-23 18:58:40

peut-être

my_qstring.toStdString().c_str();

ou plus sûr, comme le souligne Federico:

std::string str = my_qstring.toStdString();
const char* p = str.c_str();

il est loin d'être optimal, mais fera le travail.

35
répondu davidnr 2016-03-14 11:24:28

la façon la plus facile de convertir un QString en char* is qPrintable (const QString& str) , qui est une macro expansion à str.toLocal8Bit().constData() .

33
répondu Robert 2016-09-20 00:00:41

la réponse de David fonctionne très bien si vous ne l'utilisez que pour la sortie vers un fichier ou l'affichage à l'écran, mais si une fonction ou une bibliothèque nécessite un char* pour l'analyse, alors cette méthode fonctionne le mieux:

// 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);
6
répondu alex 2010-08-04 17:56:57

votre chaîne de caractères peut contenir des caractères non Latin1, ce qui conduit à des données non définies. Cela dépend de ce que vous entendez par "cela ne semble pas fonctionner".

2
répondu gregseth 2010-03-26 14:37:24

la Solution correcte serait comme ceci

   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<<"<---";
2
répondu sam 2016-05-29 08:34:27

ÉDITÉ

de cette façon, également les œuvres

QString str ("Something");

char* ch = str.toStdString().C_str();
2
répondu Shanks 2018-06-04 12:03:03