您的位置:首页 > 编程语言 > Qt开发

Qt如何去掉按钮等控件的虚线框的三种办法(焦点框)

2018-02-09 17:31 375 查看

Qt如何去掉按钮等控件的虚线框的三种办法(焦点框)

方法1:通过代码来实现

ui->pushButton->setFocusPolicy(Qt::NoFocus)


也可以在Qt Creator的属性列表中设置。

方法2:如果在嵌入式设备中需要通过按键切换控件,最简单的方法就是通过控件的focus来实现,就不能使用方法1了,此时可以通过
qss
样式表来去掉虚线框,代码如下所示。

ui->pushButton->setStyleSheet("outline: none");


方法3:使用qss样式表来实现

ui->pushButton->setStyleSheet("padding: -1");


方法4:

QItemDelegate
结果是,虚线没了,样式也没了

这个方法的作用原理和
QItemDelegate
基本一致, 因为
QItemDelegate
drawFocus
函数调用
QStyle
drawPrimitive
虚函数去做实际的绘制, 所以如果我们重新定义这个绘制过程能达到同样的效果。
drawPrimitive
函数负责绘制非常基本的界面元素,根据传入的参数判断需要绘制的元素,具体到本例就是要针对
PE_FrameFocusRect
元素做特殊处理。例子代码如下

class NoFocusRectangleStyle: public QCommonStyle
{
public:
...
void NoFocusRectangleStyle::drawPrimitive(PrimitiveElement element,
const QStyleOption *option,
QPainter *painter,
const QWidget *widget) const
{

if (QStyle::PE_FrameFocusRect == element )
return;
else
QCommonStyle::drawPrimitive(element, option, painter,widget);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt no foucs