Help us understand the problem. What is going on with this article?

Qtを使ってOS Xのアプリケーションメニューを適切な場所に表示する

More than 3 years have passed since last update.

OS X ではアプリケーションメニューと呼ばれるソフトの名前が表示された太字のメニューがファイルメニューの左側に存在しています.ここにはアプリケーションのバージョン情報や,設定,終了などのメニューがまとめられています. Windows や Linux では存在しないメニューですが, Windows や Linux との互換性を維持しながら,ここに確実にメニューを設定する方法を紹介します.

アプリケーションメニューとは

applicationmenu.png
上の画像に示したにあるメニューです.WindowsやLinuxには存在しません.なので,OS X向けには若干特別扱いしてあげる必要があります.

基本は名前から自動判別

QMenuBarのドキュメントにも書いてある通り,基本的には名前から自動的に判別されます.アプリケーション名はInfo.plistから取得されます.

文字列マッチ 場所 メモ
about.* Application Menu → About なければ表示しない
config, options, setup, settings or preferences Application Menu → Preferences なければ表示しない
quit or exit Application Menu → Quit なければQApplication::quit()を呼び出すものを生成する

example1.png
example2.png

この例では「File」メニューの下に Preferences... と Quit を用意していましたが,それ以外の項目がないので実行時には「File」メニューがなくなっています.

複数該当するものがあるときには?

multiple.png
このように複数 Quit があるような場合には両方とも普通のメニューには表示されなくなって,アプリケーションメニューには下の物だけが採用されるようです.

明示的に設定する

アプリケーションメニューに入ると困る場合や,通常と違う名前を付けたものをアプリケーションメニューに表示したいときには,MenuRoleを設定します.先ほどの例であれば

ui->actionQuit->setMenuRole(QAction::QuitRole);
ui->actionQuit_B->setMenuRole(QAction::NoRole);

のようにして,QActionに対してsetMenuRoleを呼ぶことによりQuitとして扱うか,それともRoleなしで通常メニューとして扱うかを設定できます.もし,どれでもないけどアプリケーションメニューに表示したいときにはQAction::ApplicationSpecificRoleを設定しておくとAboutの下に表示してくれます.

menu1.png

menu2.png

Macはメニューがウインドウにくっついていなかったりと他のOSと挙動が若干違いますが,Qtは必要に応じてヒントを与えてあげればうまく差を吸収してくれますので,ぜひ少しだけ気に留めていただけると OS X ユーザーが喜びます.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした