我有一个带有背景渐变和两个问题的 QTabWidget。
如何删除活动选项卡周围的烦人轮廓(见图)?我尝试了“大纲:无”,就像按钮一样,但它似乎没有效果。
如何设置禁用标签的样式?我试过 :disabled 和 :!enabled 但两者都不起作用。// 编辑:这适用于 :disabled 但不适用于所有属性。好像我试过唯一不支持的。
qt 文档没有帮助。谷歌要么。:-(
我有一个带有背景渐变和两个问题的 QTabWidget。
如何删除活动选项卡周围的烦人轮廓(见图)?我尝试了“大纲:无”,就像按钮一样,但它似乎没有效果。
如何设置禁用标签的样式?我试过 :disabled 和 :!enabled 但两者都不起作用。// 编辑:这适用于 :disabled 但不适用于所有属性。好像我试过唯一不支持的。
qt 文档没有帮助。谷歌要么。:-(
似乎焦点矩形由正在使用的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());
这应该允许您的样式表继续工作。
如果有更简单的方法来做到这一点,那就太好了,但我找不到:)
这个线程很旧,但也许这会对人们有所帮助。
如果您不需要使用焦点,则可以通过选项卡小部件进行设置:
ui->tabWidget->setFocusPolicy(Qt::NoFocus);
可以通过在您的样式中添加以下片段来删除焦点矩形:
QWidget {
outline: 0;
}
它与 QTabWidget 的样式没有直接关系,但可以按您的预期工作。