【问题标题】:Styling QTabWidget样式化 QTabWidget
【发布时间】:2012-11-06 02:34:43
【问题描述】:

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

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

  2. 如何设置禁用选项卡的样式?我试过 :disabled 和 :!enabled 但两者都不起作用。 // 编辑:这适用于 :disabled 但不适用于所有属性。好像我试过唯一不支持的。

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

【问题讨论】:

    标签: css qt stylesheet qt4.8 qtabwidget


    【解决方案1】:

    似乎焦点矩形由正在使用的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);
    }
    

    在表单的初始化器/构造器中的某个地方,您可以将自定义样式子类应用到选项卡小部件:

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

    这应该允许您的样式表继续工作。

    如果有更简单的方法来做到这一点,那就太好了,但我找不到:)

    【讨论】:

    • 感谢您的回复!当我在 linux/mac 和 windows 上使用 qt 的静态构建时,有没有办法在不引用特定样式的情况下做到这一点,它给了我很多错误?
    • 必须指定特定样式子类是此解决方案不是最佳的原因之一。我不确定这与您可能遇到的任何错误有何关系。什么错误?
    【解决方案2】:

    这个帖子很旧,但也许这会对人们有所帮助。

    如果你不需要使用焦点,那么你可以通过你的标签小部件来设置它:

    ui->tabWidget->setFocusPolicy(Qt::NoFocus);

    【讨论】:

      【解决方案3】:

      可以通过在您的样式中添加下面的 sn-p 来删除焦点矩形:

      QWidget {
          outline: 0;
      }
      

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

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-05
        • 2013-11-30
        相关资源
        最近更新 更多