造型QTabWidget

时间:2012-11-06 02:34:44

标签: css qt stylesheet qt4.8 qtabwidget

我有一个带背景渐变的QTabWidget和两个问题。

  1. 如何删除活动标签周围的恼人轮廓(见图)?我尝试了“outline:none”,就像按钮一样,但它似乎没有效果。

  2. 如何设置已停用标签的样式?我试过:禁用和:!启用但两个都不起作用。 //编辑:这适用于:已禁用但不包含所有属性。好像我尝试了唯一不支持的。

  3. Anoying focus

    qt文档没有帮助。谷歌要么。 : - (

3 个答案:

答案 0 :(得分:2)

似乎焦点矩形由QStyle处理(不要与样式表混淆)正在使用中。您可以编写QStyle子类并将其应用到您的QTabWidget。子类应覆盖drawControl()方法,如果当前正在绘制焦点矩形,则不执行任何操作。

子类看起来像这样:

<强> NoFocusRectStyle.h

#ifndef NOFOCUSRECTSTYLE_H
#define NOFOCUSRECTSTYLE_H

#include <QWindowsVistaStyle> // or the QStyle subclass of your choice

class NoFocusRectStyle : public QWindowsVistaStyle
{
public:
    NoFocusRectStyle();

protected:
    void drawControl(ControlElement element, const QStyleOption *option, 
        QPainter *painter, const QWidget *widget = 0) const;
};

#endif // NOFOCUSRECTSTYLE_H

<强> NoFocusRectStyle.cpp

#include "NoFocusStyle.h"

NoFocusRectStyle::NoFocusRectStyle()
{
}

void NoFocusRectStyle::drawControl(ControlElement element, 
    const QStyleOption *option, QPainter *painter, 
    const QWidget *widget) const
{
    if(element == CE_FocusFrame)
        return;

    QWindowsVistaStyle::drawControl(element, option, painter, widget);
}

在表单的intializer / constructor中,您可以将自定义样式子类应用于选项卡小部件:

ui->tabWidget->setStyle(new NoFocusRectStyle());

这样可以让你的样式表继续工作。

如果有一种更简单的方法可以做到这一点会很好,但我找不到一个:)

答案 1 :(得分:2)

这个帖子已经老了但也许这对人们有帮助。

如果您不需要使用焦点,则可以通过标签小部件进行设置:

UI-&GT; tabWidget-&GT; setFocusPolicy(QT :: NoFocus);

答案 2 :(得分:1)

可以通过在您的样式下添加以下代码段来删除焦点矩形:

QWidget {
    outline: 0;
}

它与QTabWidget的样式没有直接关系,但可以按预期工作。