Различные кнопки закрытия на вкладках
Я использую QTabWidget, и я хотел бы знать, могу ли я использовать разные значки для кнопок закрытия на вкладках? Я думаю, что style и setCornerWidget могут не работать в этом случае.
Спасибо!
5 ответов
Я не думаю, что это возможно с QTabWidget. Вы можете использовать QTabBar, где вы можете использовать QTabBar::setTabButton, чтобы установить виджет вашего собственного дизайна в положение вкладки.
Используйте setStyleSheet() с
QTabBar::close-button {
image: url(close.png)
}
QTabBar::close-button:hover {
image: url(close-hover.png)
}
#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()));
Кнопки закрытия по умолчанию на вкладках являются частью QStyle
ты используешь.
Из источников Qt:
case PE_IndicatorTabClose: { if (d-> tabBarcloseButtonIcon.isNull ()) { D->tabBarcloseButtonIcon.addPixmap(QPixmap( QLatin1String(":/ Trolltech / стили / commonstyle / изображения /standardbutton-closetab-16.png")), QIcon::Normal, QIcon::Off); D->tabBarcloseButtonIcon.addPixmap(QPixmap( QLatin1String(":/ Trolltech / стили / commonstyle / изображения / standardbutton-closetab-вниз-16.png")), QIcon::Normal, QIcon::On); D->tabBarcloseButtonIcon.addPixmap(QPixmap( QLatin1String(":/ Trolltech / стили / commonstyle / изображения / standardbutton-closetab-парят-16.png")), QIcon::Active, QIcon::Off); }
Из того, что выглядит, вы должны создать подкласс QStyle и переопределить PE_IndicatorTabClose
и вернуть другой путь QIcon.
Например, если вы хотите изменить значок на значок с прозрачным фоном и изменить фоновый значок при наведении:
QTabBar::close-button
{
image: url(:icons/close.svg)
}
QTabBar::close-button:hover
{
background: #A0A0A0
}