私は現在、より大きなプロジェクトに取り組んでいます。「ロジック」は標準のC++で実装され、すべての文字列はstd::wstring
で処理され、UI部分はQtを使用して実装されるため、必然的にQString
(ボーナス質問:これは本当ですか?).
これらの2つの世界を接続するための最良の方法は何ですか?
私は私が次のようなものを使用できることを知っています
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
しかし、タイピングを少なくしてより良い方法があるかどうか疑問に思っています。ユーザー定義のオペレーターが頭に浮かびましたが、私は自分でそれに取り組むのに十分な経験がありません。
誰かが私を正しい方向に向けることができれば嬉しいです。
Qtがプロジェクトとまったく同じSTLヘッダーでコンパイルされている場合は、QString::fromStdWString
but(!!!)を使用することをお勧めします。そうでない場合は、バグを見つけて、たくさんの楽しみを得ることができます。
両方のSTLヘッダーが同じであるかどうかわからない場合は、QString::fromWCharArray
を使用してください。
std::wstring wideString;
QString qtString = QString::fromWCharArray( wideString.c_str() );
更新: @ juzzlinへの回答:
Qtが次のstd::wstring
を含むSTLでビルドされたと想像してみましょう。
class wstring { // I know, that there's no such class, but I'm shure you'll understand what I want to say
wchar_t * m_ptr;
size_t m_length;
...
};
次のstd::wstring
を含むSTLがあります。
class wstring {
wchar_t * m_ptr;
wchar_t * m_the_end;
...
};
std::wstring
をQtに渡すと、m_the_end
ポインタが文字列の長さとして解釈されます。
バグを見つけて、たくさんの楽しみを得ることができます
ユーザー定義の変換はあなたが探しているものだと思います。私が収集できるものから、次のようになります。
class foo
{
public:
operator QString(std::wstring& ws)
{
return QString::fromStdWString(ws);
}
}
インライン関数QString toQString(std::wstring string)
を作成して、「入力しにくくする」.。
しかし正直に言うと...それは時々それを書くための大きな努力ではありません;)
とても長いザイ