最も基本的な方法は何ですか?
文字列で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);
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);
STL互換でコンパイルされた場合、QString
には、std::string
をQString
に変換する staticメソッド があります。
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());
これには、最後にstd::string
を追加する場所がない場合に'\0'
が自分自身をコピーする可能性がある.c_str()
を使用しないという利点があります。
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());
このような文字列を処理する必要がない場合、上記の回答は正常に機能します。
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());
さらに、必要なものを変換するには、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