Les différents boutons de fermeture des onglets
Question
J'utilise QTabWidget, et je voudrais savoir si je peux utiliser des icônes pour les boutons de fermeture des onglets? Je pense que le style et setCornerWidget peut ne pas fonctionner dans ce cas.
Merci!
La solution
Je ne pense pas que cela est possible avec un QTabWidget. Vous pouvez utiliser un QTabBar où vous pouvez utiliser QTabBar :: setTabButton pour définir un widget de votre propre conception dans la position de l'onglet.
Autres conseils
setStyleSheet () avec
QTabBar::close-button {
image: url(close.png)
}
QTabBar::close-button:hover {
image: url(close-hover.png)
}
http: //doc.qt. io / qt-4.8 / stylesheet-examples.html #-qtabwidget-personnalisation et qtabbar
Les boutons de proximité par défaut sur les onglets font partie du QStyle
que vous utilisez.
A partir des sources Qt:
case PE_IndicatorTabClose: { if (d->tabBarcloseButtonIcon.isNull()) { d->tabBarcloseButtonIcon.addPixmap(QPixmap( QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-closetab-16.png")), QIcon::Normal, QIcon::Off); d->tabBarcloseButtonIcon.addPixmap(QPixmap( QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-closetab-down-16.png")), QIcon::Normal, QIcon::On); d->tabBarcloseButtonIcon.addPixmap(QPixmap( QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-closetab-hover-16.png")), QIcon::Active, QIcon::Off); }
De quoi il ressemble, vous devez sous-classe QStyle et override PE_IndicatorTabClose
et retourner un chemin de QIcon différent.
#include <QProxyStyle>
class AppStyle : public QProxyStyle
{
Q_OBJECT
public:
AppStyle(QStyle *style = 0) : QProxyStyle(style) {}
void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
{
if (element == PE_IndicatorTabClose)
{
int size = proxy()->pixelMetric(QStyle::PM_SmallIconSize);
QIcon::Mode mode = option->state & State_Enabled ?
(option->state & State_Raised ? QIcon::Active : QIcon::Normal)
: QIcon::Disabled;
if (!(option->state & State_Raised)
&& !(option->state & State_Sunken)
&& !(option->state & QStyle::State_Selected))
mode = QIcon::Disabled;
QIcon::State state = option->state & State_Sunken ? QIcon::On : QIcon::Off;
QPixmap pixmap = QIcon(":myclose.png").pixmap(size, mode, state);
proxy()->drawItemPixmap(painter, option->rect, Qt::AlignCenter, pixmap);
}
else
{
QProxyStyle::drawPrimitive(element,option,painter,widget);
}
}
};
dans main.cpp:
QApplication app(argc, argv);
app.setStyle(new AppStyle(app.style()));