3

我正在使用 QTabWidget,我想知道是否可以使用不同的图标作为选项卡上的关闭按钮?我认为 style 和 setCornerWidget 可能不适用于这种情况。

谢谢!

4

5 回答 5

6

使用setStyleSheet () 与

 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#customizing-qtabwidget-and-qtabbar

于 2011-09-06T18:22:21.353 回答
3

我认为 QTabWidget 不可能做到这一点。您可以使用 QTabBar ,您可以在其中使用 QTabBar::setTabButton 将您自己设计的小部件设置到选项卡位置。

于 2010-12-26T10:42:56.820 回答
0

选项卡上的默认关闭按钮是QStyle您正在使用的一部分。

从 Qt 来源:

    案例 PE_IndicatorTabClos​​e: {
        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);
        }

从它的外观来看,您必须继承 QStyle 并覆盖PE_IndicatorTabClose并返回不同的 QIcon 路径。

于 2010-12-26T10:55:23.483 回答
0
  #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);
                }
            }
        };

在 main.cpp 中:

QApplication app(argc, argv);
app.setStyle(new AppStyle(app.style()));
于 2015-10-23T10:37:32.090 回答
0

例如,如果要将图标更改为具有透明背景的图标,并在悬停时更改背景图标:

QTabBar::close-button
{
    image: url(:icons/close.svg)
}

QTabBar::close-button:hover
{
    background: #A0A0A0
}
于 2021-09-07T10:09:44.833 回答