@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.
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
Tenga en cuenta que mis comentarios anteriores fueron respuestas a comentarios ahora eliminados. Perdón por la confusion. – ypnos