About
以下は、 C++のMacでメニュー項目を正しく機能させる例です。重要なsetMenuRole
のは正しい役割をすることです。Quit、About、Preferences、AboutQtの役割があります。アプリケーション名が太字のメニュー項目はOSから提供されているので、特別なことをする必要はありません。Qtは、正しい役割を持つアイテムをそれらが属する場所に自動的に移動します。[終了]メニュー項目を取得するために何もする必要はありません。提供しない場合は自動的に追加されます。
Qt Designerでメニューを作成している場合はmenuRole
、それらのメニューQActionsのプロパティを設定するだけです。メニューが正しい場所に移動するために必要なのはこれだけです。アプリケーションの名前でメニューを追加しないでください。通常のWindowsスタイルのメニュー([ファイル]、[編集]、[ヘルプ])を作成するだけで、アイテムが役割に合わせて適切に再配置されます。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationVersion(...);
a.setOrganizationName(...);
a.setOrganizationDomain(...);
a.setApplicationName(...);
MainWidget w; // MainWidget is your widget class
QMessageBox * aboutBox = new QMessageBox(&w);
QImage img(":/images/youricon.png");
aboutBox->setIconPixmap(QPixmap::fromImage(
img.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
QString txt;
txt = txt.fromUtf8(
"fooapp %1\nCopyright \xC2\xA9 2012 Ed Hedges\n"
"Licensed under the terms of ....");
txt = txt.arg(a.applicationVersion());
aboutBox->setText(txt);
QMenuBar menu;
QMenu * submenu = menu.addMenu("Help");
QAction * about = submenu->addAction("About", aboutBox, SLOT(exec()));
about->setMenuRole(QAction::AboutRole);
w.show();
return a.exec();
}