2012-06-18 5 views
5

Así que, básicamente, quiero crear una aplicación GUI utilizando PySide y Qt Framework. Estoy usando el diseñador de QT para hacer el diseño de UI inicial. La primera versión de la aplicación se ejecutará en Mac y quiero que sea como otras aplicaciones de Mac donde el nombre de la aplicación está en negrita y completamente a la izquierda con un "Acerca de", "Preferencias" y "Salir".Qt no me permite crear un elemento de menú con el nombre de mi aplicación con las cadenas "Acerca de", "Preferencias", o "Salir? ¿Alguna sugerencia?

el problema es que cada vez que agrego este tipo de cadenas de la gota abajo deja de funcionar.

Algún consejo sobre esto sería útil esta es mi primera interfaz gráfica de usuario utilizando PySide, QT Framework y andd QT Designer.

Respuesta

5

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(); 
} 
1

No sé sobre Python; pero en la Mac crea elementos de menú Acerca de, Preferencias o Salir y Qt los cambiará automáticamente al menú de la aplicación de la izquierda (el que tiene el texto en negrita).

Supongo que estás tratando de crear tu propio menú de aplicaciones y Qt se confunde. No necesitas crearlo. Coloque sus elementos de menú Acerca de, Preferencias o Salir debajo de Archivo u otro encabezado de menú y se desplazarán.

+0

Gracias esta es la explicación que estaba buscando. – edhedges

+0

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ú. –

+0

Puede establecer la función de menú de QAction en el diseñador – koan

Cuestiones relacionadas