首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >造型QTabWidget

造型QTabWidget
EN

Stack Overflow用户
提问于 2012-11-06 02:34:43
回答 3查看 1.6K关注 0票数 4

我有一个背景梯度的QTabWidget和两个问题。

  1. 我是如何删除活动选项卡周围的阳极轮廓(见图)?我试过“大纲:没有”喜欢按下按钮,但它似乎没有效果。
  2. 如何设置禁用选项卡的样式?我试过:禁用和:!已启用,但两者都不能工作。// Edit:这适用于:禁用,但并不适用于所有属性。似乎我尝试了唯一不受支持的.

qt文档对此毫无帮助。谷歌也是。:-(

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-06 04:08:07

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

子类看起来如下所示:

NoFocusRectStyle.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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/构造函数中,您可以将自定义样式子类应用于选项卡小部件:

代码语言:javascript
复制
ui->tabWidget->setStyle(new NoFocusRectStyle());

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

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

票数 2
EN

Stack Overflow用户

发布于 2015-04-03 08:33:12

这条线是旧的,但也许这能帮助人们。

如果您不需要使用焦点,那么您可以通过选项卡小部件设置它:

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

票数 2
EN

Stack Overflow用户

发布于 2015-01-07 07:11:56

可以通过在样式中添加下面的片段来删除焦点矩形:

代码语言:javascript
复制
QWidget {
    outline: 0;
}

它与QTabWidget的样式没有直接关系,但正如您所期望的那样工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13243510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档