火曜日, 9月 19, 2023

Qt6 の日本語化 (CMake, QtLinguist)

 Qt5 の日本語化の記事はあるようですが、Qt6 CMake を使っての方法が探してもなかったので書いておきます。

プロジェクト作成時、言語を設定してもそのままでは日本語化できません。

手順は以下の通りです。

  1. 空の TS ファイルを作る
  2. CMakeLists.txt を更新する
  3. CMake を用いて単語を抽出する
  4. QtLinguist で日本語化する
  5. アプリ側で QM ファイルを読み込む


空のTSファイルを作る


このファイルはプロジェクト作成時、言語を指定すると自動生成されます。指定していなければ作成します。

ファイル名は任意ですが、 <アプリ名>_ja_JP.ts などするとわかりやすいかもしれません。

空といっても骨格は記述します。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ja_JP">
<context>
</context>
</TS>

CMakeLists.txt を更新する


以下のコマンドを追加します。
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

qt6_add_translations(I18n
    TS_FILES I18n_ja_JP.ts
    QM_FILES_OUTPUT_VARIABLE qm_files)
install(FILES ${qm_files} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}


CMake を用いて単語を抽出する


以下のコマンドをビルドのディレクトリで走らせると単語が抽出されます。
cmake --build . --target update_translations

QtLinguist で日本語化する


QtCreator で TS を右クリックすると Open With メニューから Qt Linguist を起動できます。

コマンドラインからも起動できます。


アプリ側で QM ファイルを読み込む


TS ファイルは QM ファイルへ変換されます。

アプリ側でファイルを読み込むと作業は完成です。標準コンポーネントのため、標準 QM ファイルも読み込みます。

以下のコードではロケールの設定で言語を指定します。

  QTranslator translator;
  const QStringList uiLanguages = QLocale::system().uiLanguages();
  for (const QString &locale : uiLanguages) {
    const QString baseName = "I18n_" + QLocale(locale).name();
    if (translator.load(baseName)) {
      a.installTranslator(&translator);
      break;
    }
  }
  QTranslator stdTranslator;
  for (const QString &locale : uiLanguages) {
    const QString baseName = "qt_" + QLocale(locale).name();
    if (stdTranslator.load(baseName,QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
      a.installTranslator(&stdTranslator);
      break;
    }
  }

上記の方法で作成したプロジェクトです。参考まで。
https://github.com/easai/I18n.git

木曜日, 9月 07, 2023

Qt キュート(C++ GUI フレームワーク)

 Qt キュート って GUI フレームワークがあります。案件が降ってくるとかで手を出したんですが(来なかった)書きやすいので引っかかったところとか書いておきたいと思います。C++です。

最新版が Qt6 で、CMake が標準です。ポータブルなのが売りですが Windows で使ってます。使えます。

画面を見たら分かるかと思いますが、Qt では画面のデザインが標準化されていて楽です。きっちり並んだ部品は感動です。

縦横並べるコマンドがあって、隙間をそろえる部品があります。

Qt オープンソース・ダウンロード

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...