2015-08-21 3 views
2

Existe-t-il un moyen de modifier les icônes de survol/pressées pour un QDockWidget (Qt 4.8) dans une feuille de style? J'utilise ce style pour changer l'image du bouton pour l'état par défaut:QDockWidget float/close button hover images

QDockWidget{ 
    font-weight: bold; 
    titlebar-close-icon: url(:/icons/ui-dock-close-off.png); 
    titlebar-normal-icon: url(:/icons/ui-dock-float-off.png); 
} 

J'ai essayé deux façons différentes, mais aucun d'entre eux semblent fonctionner.

QDockWidget::float-button:hover{ 
    image: url(:/icons/icons/ui-dock-float-hover.png); 
} 

QAbstractButton#qt_dockwidget_floatbutton{ 
    image: url(:/icons/icons/ui-dock-float-hover.png); 
} 

Répondre

2

Je devais juste faire ce travail, moi-même. Je trouve que le comportement qss de la barre de titre par défaut de QDockWidget est très bizarre.

Au fond, c'est le résultat final qui fonctionne pour moi, mais il y a d'abord quelques explications à faire. La première chose est que l'utilisation du paramètre "image" pour définir une icône ne permet pas de définir la taille de l'icône, et elle a été réduite au minimum. Pour cette raison, je ne pouvais pas utiliser "titlebar-close-icon: none" comme je le voulais. La seconde est que vous ne pourrez pas utiliser le paramètre "image" du paramètre "QDockWidget :: close-button: hover" associé au paramètre "titlebar-close-icon" car l'image "hover" sera dessiné derrière l'icône. C'est probablement pourquoi vous n'avez pas vu les résultats que vous attendiez dans vos exemples donnés. Ce que j'ai fini par faire ci-dessous était de définir un png "vide" (complètement transparent) comme icône, ce qui signifie que je peux ensuite contrôler la taille du bouton en utilisant le réglage "taille d'icône". J'ai ensuite défini "l'image" pour les boutons, et fait usage du sous-paramètre "hover" pour gérer mon icône en surbrillance. Enfin, j'ai trouvé que (au moins dans mon environnement) les changements d'icônes ne collent pas à moins que le widget ne soit flotté puis redocké, à ce moment les icônes sont toutes présentes et expliquées. Ce que j'ai fait pour contourner cela était juste d'appeler setFloating (True), puis setFloating (False) après avoir appliqué le style. Il n'y a pas de scintillement visible ou quoi que ce soit que je puisse voir, donc je vais avec.

QDockWidget { 
    background: rgb(36,38,41); 
    titlebar-close-icon: url(:icons/blank.png); 
    titlebar-normal-icon: url(:icons/blank.png); 
} 

QDockWidget::title { 
    background: transparent; 
    color: transparent; 
    text-align: center; 
    border: none; 
} 

QDockWidget::close-button, QDockWidget::float-button { 
    border: none; 
    background: transparent; 
    icon-size: 12px; 
    padding: 1px; 
} 

QDockWidget::float-button { 
    image: url(:icons/undock.png); 
} 

QDockWidget::close-button { 
    image: url(:icons/close.png); 
} 

QDockWidget::float-button:hover { 
    image: url(:icons/undock_hover.png); 
} 

QDockWidget::close-button:hover { 
    image: url(:icons/close_hover.png); 
}