19

タイプの関数の出力を使用する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());
4

1 に答える 1

10

以下のコードは正常に動作するはずです。あなたの問題はおそらく別の場所にあります。クリーンビルドをしてください。

エラーは、あなたが私たちと共有していない、より複雑なコードの別の場所にあります。_foo の設定が間違っていると問題が発生する可能性があります。

ご自身でお気づきのように、インターフェイスを変更することはできませんが、理想的な世界では、std 文字列と QString を混在させないことに注意することをお勧めします。コード内で QStrings を完全に使用するだけです。

何らかの理由で std または生の char* 型を使用する必要がある場合でも、QString は渡された const 文字列に対処するため、コードでそのような const キャストを行わない方がよいでしょう。

main.cpp

#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;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

出力

TEST: "Hello World!
"
于 2013-12-29T11:44:29.603 に答える