logo
  • Home
  • ソフトウェア
    • アタッシェケースアイコン
      アタッシェケース

      ファイル暗号化ツール(Windows)

    • MarkDown#Editorアイコン
      MarkDown#Editor

      Markdownデュアルエディタ(Windows)

    • OutlineTextアイコン
      OutLineText

      Markdownによるアウトライナー(macOS)

    • OutlineTextアイコン
      BossComing

      一瞬で偽デスクトップに差し替え(Windows)

  • 開発ツール
    • Png2WinIco

      PNGからWindowsICOファイル生成(Windows)

    • SHCode-JP-Zen-Haku

      プログラミング用等幅フォント(Windows, macOS)

    • 秀丸エディタ・日付挿入マクロ

      柔軟な日付挿入可能な「秀丸エディタ」専用マクロ

    • 秀丸エディタ・Markdown強調表示定義ファイル

      「秀丸エディタ」専用の強調表示定義ファイル

  • このサイトについて
  • ブログ
  1. Home
  2. Blog
2019年07月02日 17:33 更新

QtでMacOSXアプリケーションメニューに「環境設定」項目を追加、表示する

hibara

2014年5月19日 22:56 C++ JavaScript Qt プログラミング

一昨日の土曜日、はじめてQt 勉強会 #11 @Tokyoにも参加。まとめは、こちらです。

めっちゃ濃いことやっている人たちばかりで腰引けました(笑)。

僕はせいぜいライブラリの寄せ集めで、さくっとアプリつくっちゃうという軽さが、とても恥ずかくなります(笑)。続々成果が発表されるなか、勉強会でやりたかったこと、をやる前に、ちがう問題が発生し、さらにそれもその日に解決できずに、宿題になってしまったという・・・

ただ、主催者の @task_jpさんからのアドバイスもあり、その後、それら宿題を解消できたのでここにシェアします。

メインメニュー「環境設定」というは、いわゆるコレです。

環境設定メニューの画像

Qtの公式ページを見ると、
http://qt-project.org/doc/qt-5/qmenubar.html#qmenubar-on-mac-os-x

If you want all windows in a Mac application to share one menu bar, you must create a menu bar that does not have a parent. Create a parent-less menu bar this way:

[cpp]

QMenuBar *menuBar = new QMenuBar(0);

[/cpp]

親のないメニューバーから生成する、とある。
ただ、すでにそのようなメニューは作っていて、どこに「それら」を挿入するのかが分からない。
[cpp]

QMenu *fileMenu = menuBar()->addMenu("&File");
fileMenu->addAction(tr("&New Window"), this, SLOT(fileNew()), QKeySequence::New);
fileMenu->addAction(tr("&Open…"), this, SLOT(fileOpen()), QKeySequence::Open);
fileMenu->addAction(tr("&Save"), this, SLOT(fileSave()), QKeySequence::Save);
fileMenu->addAction(tr("Save &As…"), this, SLOT(fileSaveAs()));

[/cpp]

ファイルメニュー

結論を言うと、なんか、実に微妙な実装なのですが、AddMenu() にある特定の文字列があれば、
QMenu のどこに存在してようと、良いみたい。

マニュアルにもそう書いてある。
http://qt-project.org/doc/qt-5/qmenubar.html#qmenubar-on-mac-os-x

String matches Placement Notes
about.* Application Menu | About <application name> The application name is fetched from the Info.plist file (see note below). If this entry is not found no About item will appear in the Application Menu.
config, options, setup, settings or preferences Application Menu | Preferences If this entry is not found the Settings item will be disabled
quit or exit Application Menu | Quit <application name> If this entry is not found a default Quit item will be created to call QApplication::quit()

なので、ソースコードには、こんなふうにしました。

[cpp]

QMenu *fileMenu = menuBar()->addMenu("&File");
fileMenu->addAction(tr("&New Window"), this, SLOT(fileNew()), QKeySequence::New);
fileMenu->addAction(tr("&Open…"), this, SLOT(fileOpen()), QKeySequence::Open);
fileMenu->addAction(tr("&Save"), this, SLOT(fileSave()), QKeySequence::Save);
fileMenu->addAction(tr("Save &As…"), this, SLOT(fileSaveAs()));

//ファイルメニューにぶら下がるようにコードを挿入
fileMenu->addAction(tr("about.*"), this, SLOT(aboutPaneView()));
fileMenu->addAction(tr("preferences"), this, SLOT(optionPanelView()));
[/cpp]

こう書くと、「ファイル」メニューのプルダウン項目に表示されそうですが、そこには表示されず、
実際は、アプリケーションメニュー内に表示されます。

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

「about.*」は、ママです。そのままアスタリスクを書きます。.plistにある「アプリケーション名」をQt が自動的に引っ張ってきて、「About AppName」という感じに表示してくれます。たぶん、アプリケーションが日本語表示対応なら、「AppNameについて」というメニューになるはずです。

「preferences」も同様に、日本語環境に対応させると「環境設定」と表示されるようです。

File メニューの中に AddMenu() したのに、実際はアプリケーションメニューに表示されるという、なんだか気持ち悪い仕様ですが、MacOSXがそうなのであって、他のOSでは、ちがう実装になるということに注意が必要でしょう。

一昨日のQt 勉強会 #11 @Tokyoでも、「気持ち悪い」「ホントに大丈夫なの?」との感想がありましたが、「マニュアルがそうなっているので、そうなんでしょう」っていう結論でした(笑)。
 
 


コメントする     返信コメントをキャンセル(閉じる)

メールアドレスが公開されることはありません。

これらの HTML タグと属性を使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

HiBARA blog

日々の開発作業で気づいたこと共有を。同じところで躓いている人が、 検索で辿り着けたら良いな、というスタンスで記事を書くので不定期更新になります。

Post Categories

  • BizSpark (1)
  • C# (10)
  • C++ (2)
  • C++Builder (2)
  • C++Builder XE4 (1)
  • CoffeeScript (3)
  • DynamoDB (2)
  • Electron (1)
  • Inno Setup (3)
  • iPhone (1)
  • JavaScript (11)
  • jQuery (3)
  • Mac OSX (2)
  • Markdown (2)
  • MarkDown#Editor (5)
  • PHP (7)
  • Qt (5)
  • SHA-3 (2)
  • Smarty (2)
  • アタッシェケース (23)
  • など (2)
  • フォント (1)
  • プログラミング (33)
  • 未分類 (1)

Tags

  • DLL
  • exe
  • Inno Setup
  • NuGet
  • signtool
  • コードサイニング証明
  • サテライトアセンブリ
  • マージ
  • 光コラボレーション
  • 株式会社CL

© 2011-2023 M.Hibara

Facebook icon
Twitter icon
GitHub icon
Qiita icon