それを行う最も基本的な方法は何ですか?
それを行う最も基本的な方法は何ですか?
回答:
文字列とは 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);
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
、静的メソッドがあります、a std::string
をa に変換するQString
。
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
か?QString
渡されたものをコピーするかどうかはわかりません。
fromStdString
これらを保存し、から構築し.c_str
ます。(そして、この質問に私を導いたのは、正確にこれを行う方法でした。)
別の方法:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
これには、末尾にを追加する場所がない場合にがそれ自体をコピー.c_str()
する可能性があるため、使用しないという利点があります。std::string
'\0'
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
警告:にがstd::string
含まれている場合、これは機能しません\0
。
この質問に出くわしたのは、回答に従うときに問題があったためです。解決策をここに投稿します。
上記の例はすべて、ASCII値のみを含む文字列のサンプルを示しています。この場合、すべてが正常に機能します。ただし、Windowsで文字列を処理するときに、ドイツ語のウムラウトなどの他の文字も含めることができる場合、これらのソリューションは機能しません
そのような場合に正しい結果を与える唯一のコードは
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
このような文字列を処理する必要がない場合は、上記の回答が適切に機能します。
fromLocal8Bit()
さらに、必要なものを変換するために、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
文字列のようなC文字列ですかchar*
、それとも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());
QByteArray::QByteArray (const char* data, int size)
して最初にバッファーをラッパー化し、それをQString
コンストラクターに渡すことができます。