A continuación se muestra un ejemplo de cómo la opción de menú About
funciona correctamente en Mac, en C++. La clave es setMenuRole
para el rol correcto. Hay funciones para Salir, Acerca de, Preferencias y Acerca de Qt. El OS proporciona el elemento del menú con el nombre de la aplicación en negrita, no necesita hacer nada especial para obtenerlo. Qt moverá automáticamente los elementos con los roles correctos a los que pertenecen. No necesita hacer nada para obtener el elemento del menú Salir, se agrega automáticamente si no proporciona uno.
Si está creando menús en Qt Designer, simplemente configure la propiedad menuRole
de esas QActions del menú. Eso es todo lo que se necesita para que los menús vayan a lugares correctos. No agregue un menú con el nombre de su aplicación. Simplemente cree menús usuales de Windows (Archivo, Editar, Ayuda), y los elementos se reorganizarán de manera apropiada según sus roles.
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();
}
Gracias esta es la explicación que estaba buscando. – edhedges
Esto depende de la detección automática de roles para los menús. Fallará si los nombres no traducidos no son en inglés, por ejemplo. Es mucho más seguro establecer explícitamente los roles del menú. –
Puede establecer la función de menú de QAction en el diseñador – koan