it-swarm.com.de

QString in Char * -Konvertierung

Ich habe versucht, einen QString in den Typ char * mit den folgenden Methoden zu konvertieren, aber sie scheinen nicht zu funktionieren.

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

Können Sie die möglichen Fehler mit dieser Methode ausarbeiten oder eine alternative Methode angeben?

75
mawia

Nun, der Qt FAQ sagt:

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

Vielleicht haben Sie andere Probleme. Wie genau funktioniert das nicht?

102
Eli Bendersky

Könnte sein

my_qstring.toStdString().c_str();

oder sicherer, wie Federico betont:

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

Es ist alles andere als optimal, wird aber die Arbeit erledigen.

43
davidnr

Ein QString in char * kann am einfachsten konvertiert werden durch qPrintable (const QString & str) , Dabei handelt es sich um ein Makro, das zu str.toLocal8Bit().constData() erweitert wird.

33
Robert

Davids Antwort funktioniert gut, wenn Sie sie nur zur Ausgabe in eine Datei oder zur Anzeige auf dem Bildschirm verwenden. Wenn eine Funktion oder Bibliothek ein Zeichen * für die Analyse benötigt, funktioniert diese Methode am besten:

// 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
alex

BEARBEITET

dieser Weg funktioniert auch

QString str ("Something");

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

Ihre Zeichenfolge enthält möglicherweise keine Latin1-Zeichen, was zu undefinierten Daten führt. Es hängt davon ab, was Sie mit "es scheint nicht zu funktionieren" bedeuten.

2
gregseth

die richtige Lösung wäre so

   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
sam

Wenn Ihre Zeichenfolge Nicht-ASCII-Zeichen enthält, sollten Sie dies folgendermaßen tun: s.toUtf8().data() (oder s->toUtf8().data())

0
AlexDarkVoid