我嘗試避免在QT程序中混合使用QString
和char*
類型。我有一個會話函數,它返回QString
中的數據指針,但是我得到了非常奇怪的結果。這段代碼有什麼問題?QString格式不起作用qDebug
編譯器和環境GCC(Debian的4.9.2-10)通過QMAKE 4.9.2 標誌:QMAKE_CXXFLAGS += -std=c++11
代碼片段:
#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();
}
結果
%s does not work! does not work!
embedding does not work!
embedding does not work!
感謝這一點清楚。除了宏還有其他的解決方案嗎? .. #define CH(m)(m.toAscii()。data())。 ? – huckfinn
爲什麼不'qDebug()<< m'? – Starl1ght
我喜歡通過預定義的錯誤代碼使用記錄功能的printf功能。類似這樣的:const QString ERR_UNKOWN_WORK_DIR =「%s:未知工作目錄%s」; – huckfinn