質問

最も基本的な方法は何ですか?

役に立ちましたか?

解決

文字列で意味する場合 std::string この方法でそれを行うことができます:

QString QString::fromStdString(const std::string & str)

std::string str = "Hello world";
QString qstr = QString::fromStdString(str);

文字列がASCIIエンコードを意味する場合 const char * 次に、この方法を使用できます。

QString QString::fromAscii(const char * str, int size = -1)

const char* str = "Hello world";
QString qstr = QString::fromAscii(str);

あなたが持っている場合 const char * で読み取ることができるシステムエンコーディングでエンコードされています。 QTextCodec::codecForLocale() その場合は、この方法を使用する必要があります。

QString QString::fromLocal8Bit(const char * str, int size = -1)

const char* str = "zażółć gęślą jaźń";      // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);

あなたが持っている場合 const char * UTF8 でエンコードされている場合は、次の方法を使用する必要があります。

QString QString::fromUtf8(const char * str, int size = -1)

const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);

という方法もあります const ushort * UTF16 でエンコードされた文字列を含む:

QString QString::fromUtf16(const ushort * unicode、int size = -1)

const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);

他のヒント

STL互換でコンパイルされた場合、 QString にはがあります std :: string QString

に変換する静的メソッド
std::string str = "abc";
QString qstr = QString::fromStdString(str);

代替方法:

std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());

これには、 .c_str()を使用しないという利点があります。 std :: string は、 > '\ 0' の最後。

std::string s = "Sambuca";
QString q = s.c_str();

警告: std :: string \ 0 sが含まれている場合、これは機能しません。

回答を追跡するときに問題が発生したため、この質問に出くわしたので、ここに解決策を投稿します。

上記の例はすべて、ASCII値のみを含む文字列のサンプルを示しています。この場合、すべてが正常に機能します。ただし、Windowsで文字列を処理するときに、ドイツ語のウムラウトなどの他の文字も含めることができる場合、これらのソリューションは機能しません

そのような場合に正しい結果を与える唯一のコードは

std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());

このような文字列を処理する必要がない場合、上記の回答は正常に機能します。

さらに、必要なものを変換するには、QVariantクラスを使用できます。

例:

std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();

出力

"hello !"
"10"
"5.42"
5

char * 文字列のようなC文字列ですか、それともC ++ std :: string オブジェクトですか?

どちらの方法でも、QTリファレンスに記載されているのと同じコンストラクターを使用します。

通常のC文字列の場合、メインコンストラクターを使用します。

char name[] = "Stack Overflow";
QString qname(name);

std :: string の場合、 char * をバッファーに取得し、それを QString コンストラクターに渡します:

>
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top