文字列をQStringに変更するにはどうすればよいですか?
質問
最も基本的な方法は何ですか?
解決
文字列で意味する場合 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());