I try to avoid mixed QString
and char*
types in a QT program. I have a conversation function that returns a pointer of the data inside the QString
, but I get very strange results. Whats wrong with this code?
Compiler and environment gcc (Debian 4.9.2-10) 4.9.2
Flags via qmake: QMAKE_CXXFLAGS += -std=c++11
Code snippet:
#include <QCoreApplication>
#include <iostream>
#define PCH(m) ( m.toAscii().data() )
// get the pointer short scripted
const char* CH(QString msg) {
const char* res = msg.toAscii().data();
return res;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
const QString qformat = "%s does not work!";
const QString qvalue = "embedding";
// Works not
qDebug(CH(qformat), CH(qvalue));
// Works
qDebug(qformat.toAscii().data(), qvalue.toAscii().data());
// Works too but macro
qDebug(PCH(qformat), PCH(qvalue));
return app.exec();
}
Results
%s does not work! does not work!
embedding does not work!
embedding does not work!