見出し画像

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を使うのでしたら積極的に使った方がソースコードの量を減らせます。

いいなと思ったら応援しよう!