好的,所以我想自定义QToolBox小部件中标签图标的高度和位置。我无法使用样式表(我尝试了不同的选项,但没有一个工作,请参阅问题:Customizing QToolBox: tab height),所以我决定尝试使用代理。我知道有controlElements:
CE_ToolBar
CE_ToolBoxTabShape
CE_ToolBoxTabLabel
所以我可以在drawControl函数上使用它们来获得我想要的东西。
void drawControl(ControlElement oCtrElement,
const QStyleOption *poStyleOptionption,
QPainter *poPainter,
const QWidget *poWidget) const
但我不确定如何实施它...任何帮助或示例? 谢谢,
更新 我创建了代理,将其分配给qtoolbox并添加条件以查看是否可以执行某些操作:
...
ToolBoxProxy* tabStyle = new ToolBoxProxy();
ui->toolBox->setStyle(tabStyle);
...
toolboxproxy.h
#include <QProxyStyle>
#include <QPainter>
class ToolBoxProxy : public QProxyStyle
{
public:
explicit ToolBoxProxy();
void drawControl(ControlElement oCtrElement, const QStyleOption * poStylrOptionption, QPainter * poPainter, const QWidget * poWidget = 0) const;
};
toolboxproxy.cpp
#include "toolboxproxy.h"
#include <QDebug>
ToolBoxProxy::ToolBoxProxy(){
}
void ToolBoxProxy::drawControl(ControlElement oCtrElement, const QStyleOption *poStyleOptionption, QPainter *poPainter, const QWidget *poWidget) const
{
if (oCtrElement == CE_ToolBar) {
qDebug() << "CE_ToolBar";
} else if (oCtrElement == CE_ToolBoxTabShape) {
qDebug() << "CE_TOOLBOXTABSHAPE";
} else if (oCtrElement == CE_ToolBoxTabLabel) {
qDebug() << "CE_ToolBoxTabLabel";
}
QProxyStyle::drawControl(oCtrElement, poStyleOptionption, poPainter, poWidget);
}
我不知道为什么,但是软件从来没有打印出任何3个qDebug()...但是如果我设置一个断点,它只在控制元素是以下任何一个时才到达函数:
CE_ItemViewItem
CE_ShapedFrame
CE_ToolButtonLabel