タイプconst char*
の関数の出力を使用する必要があり、それをQString
に変換する必要があります。
注:その関数内では、これらはconst char*
を返すコード行です
char* ClassA::getData() const{
return const_cast<char *> (_foo.c_str());
}
ここで、_foo
はstd::string
です。
次のコード行を使用しようとしましたが、常に空の文字列を取得しました(実際には空ではなく、改行文字のみを含み、他のすべての文字を無視します)。
QString foo1 = QString(temp.getData());
QString foo2 = QString::fromLocal8Bit(temp.getData());
QString foo3 = QString(QLatin1String(temp.getData()));
QString foo4 = QString::fromAscii(temp.getData());
QString foo5 = QString::fromUtf8(temp.getData());
以下のコードは問題なく動作するはずです。あなたの問題はおそらくどこか別の場所にあります。クリーンビルドを行ってください。
エラーは、あなたが私たちと共有していないより複雑なコードのどこかにあります。 _fooの設定に問題がある可能性があります。
ご存知のとおり、インターフェースを変更することはできませんが、理想的には、標準の文字列とQStringsを混在させないように注意してください。コードでQStringsを完全に使用するだけです。
何らかの理由でstdまたはraw char *型を使用する必要がある場合でも、QStringは渡されたconst文字列に対応するため、コードでそのようなconstキャストを実行しない方がよいでしょう。
#include <QString>
#include <QDebug>
class ClassA
{
public:
ClassA() { _foo = "Hello World!\n"; }
~ClassA() {}
char* getData() const {
return const_cast<char *> (_foo.c_str());
}
private:
std::string _foo;
};
int main()
{
ClassA temp;
QString myString = QString::fromUtf8(temp.getData());
qDebug() << "TEST:" << myString;
return 0;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
TEST: "Hello World!
"