使用代理

时间:2018-02-15 11:19:33

标签: qt proxy toolbox

好的,所以我想自定义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

0 个答案:

没有答案