2010-03-05 10 views

Répondre

12

Par mesure de style proxy:

class iconned_dock_style: public QProxyStyle{ 
    Q_OBJECT 
    QIcon icon_; 
public: 
    iconned_dock_style(const QIcon& icon, QStyle* style = 0) 
     : QProxyStyle(style) 
     , icon_(icon) 
    {} 

    virtual ~iconned_dock_style() 
    {} 

    virtual void drawControl(ControlElement element, const QStyleOption* option, 
     QPainter* painter, const QWidget* widget = 0) const 
    { 
     if(element == QStyle::CE_DockWidgetTitle) 
     { 
      //width of the icon 
      int width = pixelMetric(QStyle::PM_ToolBarIconSize); 
      //margin of title from frame 
      int margin = baseStyle()->pixelMetric(QStyle::PM_DockWidgetTitleMargin); 

      QPoint icon_point(margin + option->rect.left(), margin + option->rect.center().y() - width/2); 

      painter->drawPixmap(icon_point, icon_.pixmap(width, width)); 

      const_cast<QStyleOption*>(option)->rect = option->rect.adjusted(width, 0, 0, 0); 
     } 
     baseStyle()->drawControl(element, option, painter, widget); 
    } 
}; 

exemple:

QDockWidget* w("my title", paretn); 
w->setStyle(new iconned_dock_style(QIcon(":/icons/icons/utilities-terminal.png"), w->style())); 
+0

Cela fonctionne très bien; Merci! – Owen

1

grâce à @Owen, mais je voudrais ajouter quelques notes, pour Qt 5.7:

1 .QWidget :: setStyle() ne prend pas owership de l'objet de style, vous devez donc le supprimer après l'avoir utilisé, sinon il entraînera une fuite de ressources. 2.Pour QProxyStyle (QStyle *), QProxyStyle s'approprie le style d'entrée, mais w-> style() peut renvoyer l'objet style de QApplication si son style personnalisé n'est pas défini. si

new iconned_dock_style(QIcon(":/icons/icons/utilities-terminal.png"), w->style()) 

peut prendre possession de l'objet de style de l'application, et sur la destruction, il va le supprimer. cela va planter l'application sur le temps d'arrêt de QApplicatoin.

maintenant j'utiliser

new iconned_dock_style(QIcon(":/icons/icons/utilities-terminal.png"), NULL) 
Questions connexes