Frage

Ich habe versucht, ein QString zu char umwandeln * Art durch die folgenden Methoden, aber sie scheinen nicht zu arbeiten.

//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 erarbeiten, oder eine alternative Methode geben?

War es hilfreich?

Lösung

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

Also vielleicht sind mit Ihnen andere Probleme. Wie genau funktioniert das nicht?

Andere Tipps

Vielleicht

my_qstring.toStdString().c_str();

oder sicherer, als Federico betont:

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

Es ist bei weitem nicht optimal, aber die Arbeit machen.

Der einfachste Weg, einen QString char konvertieren * qPrintable (const QString & str) , welches ein Makro str.toLocal8Bit().constData() erweitert.

David Antwort funktioniert gut, wenn Sie verwenden es nur für eine Datei ausgibt oder auf dem Bildschirm angezeigt wird, aber wenn eine Funktion oder Bibliothek eine für das Parsen von char * erfordert, dann ist diese Methode am besten funktioniert:

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

EDITED

Auf diese Weise funktioniert auch

QString str ("Something");

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

können Ihre Zeichenfolge nicht Latin1 Zeichen enthalten, was zu undefinierten Daten. Es hängt davon ab, was Sie unter „es deosn't zur Arbeit erscheinen“.

Die richtige Lösung wäre wie dies

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

Wenn die Zeichenfolge nicht-ASCII-Zeichen enthalten - es ist besser, es auf diese Weise zu tun: s.toUtf8().data() (oder s->toUtf8().data())

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top