2012-09-06 42 views
15

Me gustaría utilizar los iconos de Qt Standard (as here). He encontrado muchos ejemplos de cómo set the icons programmatically (tiempo de ejecución en el código).Uso de los iconos estándar de Qt desde Qt Creator

Sin embargo, ¿cómo podría establecer el "nombre de icono estándar" (por ejemplo, application-exit) en Qt Creator? Esto blog here dice: simplemente configuro el tema con el nombre respectivo. Pero no tengo una propiedad de tema así, me gustaría obtener una ventana emergente con un recurso (captura de pantalla a continuación).

¿Dónde está el lugar correcto para aplicar el "nombre estándar" (por ejemplo, application-exit)?

Actualización de 2.4.x a Qt Creator 2.5.2 me da la propiedad "tema" del blog anterior, pero todavía no hay iconos visibles todavía. ¿Qué más se necesita para que los iconos sean visibles?

Theme now available with Creator 2.5.2

Observación Qt 4.8.1, ahora se actualiza a 2.5.2, Windows 7

Respuesta

12

Los iconos de tema solo son compatibles con Linux/X11. En Windows y OS X, debe proporcionar sus propios iconos.

La solución a este problema es establecer el nombre del tema en QtCreator (como en su ejemplo). Luego debe proporcionar íconos del mismo alias bajo Prefijo ":/íconos" en sus recursos. Puede aprovechar los iconos de los conjuntos disponibles en el dominio público, p. el popular conjunto de iconos de Tango.

Si solo se dirige a la plataforma de Windows, la configuración del tema no será de utilidad para usted. Si apuntas tanto a Linux/X11 como a otras plataformas, con esta solución obtienes los íconos nativos en un sistema y los íconos que proporcionas en los otros.

puede encontrar una muy buena explicación de cómo hacerlo aquí: http://mithatkonar.com/wiki/doku.php/qt/icons

+1

En otros sistemas operativos, hay un conjunto considerable de iconos estándar para usar en barras de herramientas, etc. Y hay temas de iconos para estos. Por ejemplo: http://commons.wikimedia.org/wiki/Tango_icons http://gnome-look.org/content/show.php/?content=122078 Como pueden ver, es un concepto bastante agradable porque todas las aplicaciones que utilizan estos íconos estándar encajan perfectamente en cualquier entorno de escritorio que también sea personalizable por el usuario. – ypnos

+0

Tenga en cuenta que mis comentarios anteriores fueron respuestas a comentarios ahora eliminados. Perdón por la confusion. – ypnos

0

Desafortunadamente, esta opción del icono del tema a través de Qt Designer no está disponible en Windows.

+0

¿Quiere decir que no funciona en Windows? Porque, como muestra la captura de pantalla anterior, es posible configurar el tema. No disponible significaría para mí, la opción no está disponible en absoluto. ¿Y esto se considera un error o es esta una decisión de diseño del equipo de Qt? ¿Alguna referencia dando más detalles? –

1

@ypnos sugirió un gran vínculo con múltiples enfoques para resolver el problema. El favorito es el último: Creating a custom icon theme. El autor señala tres Pros (disponible para todas las plataformas,excelente cambio de tamaño, cubre todos los iconos necesarios), y dos contras (no es coherente con el icono del tema del sistema, dolor en el culo para implementar). Aquí sugiero mejoras para deshacerse de los contras.

He clonado el conjunto de iconos de Tango de github. El repositorio https://github.com/ppinard/qtango ya presenta el archivo index.theme. Pero principalmente, trae una secuencia de comandos de Python generate_rcc.py, que puede generar el archivo *.qrc automáticamente. Solo tuve que cambiar los argumentos de subprocess.check_call() de '--binary' y '--compress' a '-binary' y '-compress'. El archivo generado contenía rutas absolutas, pero eso es fácil de encontrar & Reemplazar. Uno puede usar esta secuencia de comandos para cualquier conjunto de iconos: se resuelve el primer paso laborioso.

Ahora, usando la propiedad "Tema", puede definir los iconos en el Diseñador de Qt, como ya se mostró en la pregunta. Para aquellos que se desarrollan bajo Linux, los iconos del sistema se mostrarán directamente en el Diseñador (supongamos que el conjunto de iconos usa nombres de iconos estándar). Esa es la apariencia nativa (los iconos serán configurables en la configuración de su sistema). Eso lo libera de la codificación ui->action_Open->setIcon(...).

Y el ajuste final es establecer el tema antes de la configuración de ui.

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
#ifdef _WIN32 
    QIcon::setThemeName("tango"); 
#endif 

    ui = new Ui::MainWindow; 
    ui->setupUi(this); 

    ... 
    // NO NEED FOR ui->action_Open->setIcon(...) 
} 

El #ifdef puede por supuesto ser ajustado para apuntar todas las plataformas necesarias, o se omite para obligar a los mismos iconos en todas las plataformas, incluyendo Linux.

Como resultado, este enfoque evita toda codificación laboriosa y el resultado es coherente con los iconos del sistema al menos en Linux.

Cuestiones relacionadas