disabled属性样式问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了disabled属性样式问题相关的知识,希望对你有一定的参考价值。

参考技术A disabled禁用表单字段。

虽然浏览器带有默认样式,但是在某些场景,比如button元素,我们通常都会自定义样式,这样将会覆盖浏览器的默认样式,造成disabled生效时,无明显现象。

从上图可以看出,自定义样式层叠的权重比较高,将浏览器的默认样式覆盖了。

readly适用于表单文本类元素(input[text,password,file],textarea)
readly可使文本框聚焦

disabled对a链接是无效的。

优点: 简单
缺点:只能禁止鼠标事件

readonly对以上三个元素无效。

方案:
- 设置disabled属性(将导致不提交此元素)
- 将元素的值存储在hidden中

样式化 QTabWidget

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

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

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

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

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

【问题讨论】:

【参考方案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 的样式没有直接关系,但可以按您的预期工作。

【讨论】:

以上是关于disabled属性样式问题的主要内容,如果未能解决你的问题,请参考以下文章

input中的disabled 和 readonly的区别

我应该使用 CSS :disabled 伪类还是 [disabled] 属性选择器,还是见仁见智?

disabled的使用

关于bootstrap--表单控件(disabled表单禁用显示表单验证的样式)

elementui的默认样式怎么修改

ios下表单disabled样式重置