Domanda

Sto usando QTabWidget, e vorrei sapere se posso usare icone differenti per pulsanti di chiusura su schede? Credo che lo stile e setCornerWidget potrebbero non funzionare per questo caso.

Grazie!

È stato utile?

Soluzione

Non credo che questo è possibile con un QTabWidget. Si potrebbe utilizzare un QTabBar dove è possibile utilizzare QTabBar :: setTabButton per impostare un widget del vostro proprio disegno nella posizione di scheda.

Altri suggerimenti

setStyleSheet () con

 QTabBar::close-button {
     image: url(close.png)
 }
 QTabBar::close-button:hover {
     image: url(close-hover.png)
 }

http: //doc.qt. IO / QT-4.8 / foglio di stile-examples.html # personalizzazione-qtabwidget-e-qtabbar

I pulsanti di default stretti su schede sono parte della QStyle che si sta utilizzando.

Dalle fonti 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);
        }

Da quello che sembra, è necessario sottoclasse QStyle e di override PE_IndicatorTabClose e restituire un percorso QIcon diversa.

  #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);
                }
            }
        };

in main.cpp:

QApplication app(argc, argv);
app.setStyle(new AppStyle(app.style()));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top