web-dev-qa-db-ja.com

文字列をQStringに変更する方法は?

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

131
NeverAgain

文字列で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(con​​st char * str、int size = -1)

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

QTextCodec :: codecForLocale() で読み取れるシステムエンコーディングでエンコードされたconst char *がある場合、このメソッドを使用する必要があります。

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);

UTF8エンコードされたconst char *がある場合、このメソッドを使用する必要があります。

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);

UTF16エンコードされた文字列を含むconst ushort *のメソッドもあります。

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);
120
Kamil Szot

STL互換でコンパイルされた場合、QStringには、std::stringQStringに変換する staticメソッド があります。

std::string str = "abc";
QString qstr = QString::fromStdString(str);
237
sth

別の方法:

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

これには、最後にstd::stringを追加する場所がない場合に'\0'が自分自身をコピーする可能性がある.c_str()を使用しないという利点があります。

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

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

10
wilhelmtell

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

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

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

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

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

3
Devolus

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());
0
gavinb

さらに、必要なものを変換するには、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