在使用QT控件时通常会发现,软件的按钮等控件在点击时(获得焦点)边框会多一圈虚线框,用于显示该控件已获得焦点。
这在默认样式中尤为常见。
不过有时候我们并不需要这个样式,或者想要修改成其它样式,这时我们可以通过QSS样式表修改。
该特性是由QT样式中的 outline属性 控制的,用法与CSS中的outline属性基本一样。
在控件样式中添加以下代码:
/* For buttons */
QAbstractButton:focus { outline: none; }
/* For all widgets */
*:focus { outline: none; }
理论上,应用了该样式的控件在获得焦点时不再会出现虚线框了,但理论有时总是存在意外
如果控件仅设置了该样式,则可能不会生效。原因在于QT存在一些默认的绘制(如本地样式的边框),只设置某些样式可能无法生效或被默认样式覆盖。
比如官方文档 中对于QPushButton
有如下说明:
Warning: If you only set a background-color on a QPushButton, the background may not appear unless you set the border property to some value. This is because, by default, the QPushButton draws a native border which completely overlaps the background-color.
在默认样式中仅应用上述代码没有效果:
通过测试发现,许多控件在没有设置自定义前景、背景或边框等样式的情况下,虚线框仍会存在。
当我添加前景色后:
*:focus { outline:none; color: red; }
按钮的虚线框没有了,但RadioButton与CheckBox的虚线框仍存在:
继续修改样式:
*:focus {
outline:none; color: red;
}
QRadioButton:focus, QCheckBox:focus {
border:none;
}
此时RadioButton与CheckBox的虚线框也消失了。
总结:当遇到设置某个样式不生效时,可能是由于该样式未能覆盖默认样式,可以尝试设置更多自定义样式来覆盖默认样式。
评论区(暂无评论)