9

私は、グラフィカルおよび GUI コンポーネント用に取り組んでいるソフトウェア システムで Qt を広く使用しています。ただし、ほとんどの内部アルゴリズムとデータ処理では、Qt が果たす役割は小さくなります。

std::string から QString に、またはその逆に変換する必要が生じることがよくあります。私の傾向は、可能な限り std::string を使用し、ファイル システムで動作するような Qt クラスに文字列を渡す必要がある場合にのみQString を使用することです。

今朝プログラミングをしていたとき、コード全体に std::string と QString の両方を散りばめたのは悪い設計かもしれないことに気づきました。QString に完全に切り替える必要がありますか? 他の誰かがこのデザインの選択に出くわしましたか?

Qt は STL と同じ機能の多くを提供しますが、Qt は標準化されておらず安定していないため、完全に切り替えることにはまだ躊躇しています。

4

2 に答える 2

9

はい、私は以前にこのような状況にあったことがあります。私が取り組んだプログラムはずっと Qt を使用していましたが、それを期待されるライブラリに接続する必要がありましたstd::string。の利点QStringは、明示的に Unicode を使用することですが、C++ 標準ライブラリはエンコーディングについて保証しません。

解決策は、このライブラリの境界で変換することでした

QString toQString(std::string const &s)
{
    return QString::fromUtf8(s.c_str());
}

std::string fromQString(QString const &s)
{
    return std::string(s.toUtf8().data());
}

ライブラリstd::stringがUTF-8を含むを生成したためです。

あなたが望んでいるように見えるのは正反対ですstd::string.Qtの境界で全体を使用して変換します. それは完全に問題ないようです。常に を使用するよりも少しQString手間がかかりますが、受け入れられないライブラリが必要な場合QStringや、GUI 以外のコンポーネントが Qt に依存していない場合は、労力を費やす必要があります (万歳!)。

于 2011-05-26T12:17:17.077 に答える
6

std::stringプログラムコアで使用しQString、GUI部分で作業しているときにそれらを変換すると思います。GUIツールキットを変更したいと思ったことはありますが、そのほうが簡単です。

于 2011-05-26T12:27:51.013 に答える