Qt 4.8 では、次のコードがありました。
QMenuBar *menu_bar = menuBar(); //of my QMainWindow
QMenu *help_menu = menu_bar->addMenu(tr("&Help"));
QAction *about_qt_action = help_menu->addAction(tr("About &Qt"));
connect(about_qt_action, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
Qt が OS X 10.8 の下で [Qt について] メニュー項目をアプリケーション メニューに自動的に移動するには、これだけで十分でした (おそらく他のバージョンも)。
Qt 5.1 では、Qt についての項目が [ヘルプ] メニューに表示されるようになりました。以前の動作に戻すには、MenuRole を手動で設定する必要があります。
about_qt_action->setMenuRole(QAction::AboutQtRole);
ただし、ドキュメントには次のように記載されています。
デフォルトでは、すべてのアクションには TextHeuristicRole があります。これは、アクションがそのテキストに基づいて追加されることを意味します (詳細については、QMenuBar を参照してください)。
と:
Qt for Mac OS X は、QMenuBar をより受け入れられた Mac OS X メニュー バー レイアウトに近づけるためのメニュー バー マージ機能も提供します。マージ機能は、QMenu エントリのタイトルに一致する文字列に基づいています。これらの文字列は、「QMenuBar」コンテキストで (QObject::tr() を使用して) 翻訳されます。エントリが移動された場合、そのスロットは元の場所にあったかのように起動します。以下の表は、検索される文字列と、一致した場合にエントリが配置される場所の概要を示しています。
...そして、表about.*
はアプリケーションメニューに移動されたメニューを示しています。私のアプリケーションは Yua という名前で、同じように作成した「About Yua」QAction も、手動で MenuRole を設定しない限り移動しません。私の Info.plist には と の両方のエントリCFBundleName
があります。CFBundleDisplayName
私は何が欠けていますか?