QtでMacのメニューバーを日本語表示にする
Qtでメニューバー、もっと言えばリンゴマークの隣のアプリケーションメニューの部分を日本語表示するまでに、だいぶWebを彷徨ったのでちょいとメモ。なおMacは日本語設定という前提で。
なにはともあれ、メニューバーを作成します。ここにあるとおり親なしで。
QMenuBar* menu_bar = new QMenuBar(0);
Menuを追加し、Actionを追加します。なお、Actionが入っていないと、Menuだけ追加しても表示されません(ここで少し詰まった)。addActionして適当にconnectしておきます。
// 手元のQt5.2では日本語直書きでOKでした。適当にファイルメニューにします。 QMenu* file_menu = menu_bar->addMenu("ファイル"); // 親がmenu_barなのは適当。何を指定するのが標準的なのだろう? QAction* dialog_action = new QAction("ダイアログを表示",menu_bar); file_menu->addAction(dialog_action); // menu_barでconnectもどうなんだか // 作成済みのQDialogをmy_dialogとでもして menu_bar->connect(dialog_action, SIGNAL(triggered()), my_dialog, SLOT(show()));
コードはあまり参考にしない方がいいかも。もっとまともな書き方があるような気がします。
さて、ここまででメニューからぽちっとやればダイアログが表示されるようになりますが、アプリケーションメニューは英語のまま。Info.plistのRegionをいじろうが、Resources/ja.lprojの下にInfoPlist.stringsを入れようがlocversion.plistを入れようが日本語になりません。で、答えはこちらに書いてありました。具体的には、ここにの丸写しで
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(),
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
を追加するとついに日本語表示になります。素晴らしい。
ここまで来れば、Macらしくアプリケーションメニューで「MyAppについて」とかやりたくなります。一体どこのメニューに追加すればいいのかといえば、ファイルメニューに追加すればいい模様。
QAction* about_action = new QAction("について",menu_bar); file_menu->addAction(about_action);
…………え?
こちらにもあるとおり名前で判別されて自動的にMyAppの下に移動します。英語だとaboutですが、日本語だとなんと「について」でマッチがかかるみたいです。ちょっと気持ち悪い挙動ですが、めでたしめでたし。