Pergunta

Eu estava tentando converter uma QString char* digite pelos seguintes métodos, mas eles não parecem 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());

Você pode elaborar a possível falha com este método, ou dar um método alternativo?

Foi útil?

Solução

Bem, o Qt FAQ diz:

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

Por isso, talvez você tiver outros problemas.Exatamente como isso não funciona?

Outras dicas

Pode ser

my_qstring.toStdString().c_str();

Ou mais seguro, como Federico aponta:

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

Está longe de ser o ideal, mas fará o trabalho.

A maneira mais fácil de converter um QString para char* é qPrintable(const QString& str), o que é uma macro de expansão para str.toLocal8Bit().constData().

A resposta de David funciona bem se você estiver usando apenas para produzir um arquivo ou exibir na tela, mas se uma função ou biblioteca exigir um char* para análise, esse método funcionará melhor:

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

Assim também funciona

QString str ("Something");

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

Sua string pode conter caracteres não latinos, o que leva a dados indefinidos. Depende do que você quer dizer com "ele não parece funcionar".

a solução correta seria assim

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

Se sua sequência contiver caracteres não -ASCII - é melhor fazê -lo desta maneira:s.toUtf8().data() (ou s->toUtf8().data())

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top