Notes C API探訪: LMBCS文字列とQString
前回、LMBCS文字列をクラス化しましたが、Qtアプリケーション内でも使用するので、LMBCS文字列をQtの文字列クラスQStringにもワンアクションで変換できるようにヘルパー関数を定義します。
QStringと他の文字セット
QStringクラスは、Qtの中で使用されるデフォルトの文字列クラスで、非常に多機能です。他の文字セットとの変換関数も多数用意されています。このシリーズでは、LMBCS文字列との相互交換にはstd::wstring(UTF-16)を指定していますが、QStringも中身はUTF-16ですし、std::wstringとの相互交換も可能です。
// #include <QString>
QString qs("ABC");
std::wstring ws = qs.toStdWString();
QString qs1 = QString::fromStdWString(ws);
これを用いて、ヘルパー関数を次のように定義してみました。
// nxpp/include/nxpp/lmbcs/nxpp_lmbcs_qt.hpp
#ifndef NXPP_LMBCS_QT_H
#define NXPP_LMBCS_QT_H
#include "./nxpp_lmbcs.hpp"
#include <QByteArray>
#include <QString>
/**
* @brief QStringをLMBCS文字列に変換する
* @param qstr QString
* @return LMBCS文字列
*/
inline nxpp::Lmbcs toLmbcsQ(const QString &qstr) {
return toLmbcs(qstr.toStdWString());
}
/**
* @brief LMBCS文字列をQStringに変換する
* @param lmbcs LMBCS文字列
* @return QString
*/
inline QString fromLmbcsQ(const nxpp::Lmbcs &lmbcs) {
return QString::fromStdWString(fromLmbcs(lmbcs));
}
namespace nxpp {
/**
* @brief STATUS値からエラー内容のテキストに変換する
* @param status ステータス値
* @return エラーテキスト(LMBCS文字列)
*/
inline QString fromStatusQ(STATUS status) {
return fromLmbcsQ(fromStatus(status));
}
} // namespace nxpp
#endif // NXPP_LMBCS_QT_H
toLmbcsQは、QStringをLMBCS文字列に変換します。
fromLmbcsQは、LMBCS文字列をQStringに変換します。
nxpp::fromStatusQは、ステータス値のエラー文字列をQStringで取得します。
まとめ
今回ご紹介したヘッダーファイルは、Qtアプリケーション以外では用いないので、その場合は無視できます。一方で、Qtを使うのでしたら積極的に使った方がソースコードの量を減らせます。