QT之如何去除部件虚线框
开篇之叙
接着上篇QT之CheckBox单项选择与多项选择,再给大家讲讲,在我们控件上出现的虚线框,该如何去掉?有的朋友会问啦,可是我部件没出现你说的虚线框啊,这个虚线框在你按TAB键的时候,其实就会出现哦,不信你试试!
效果图
按下TAB键,虚线框是不是出现了呢,这样给人的感觉,是不是界面不太友好,没关系,我们去掉就是!
去掉虚线框效果图
在上代码之前我们先来看看Qt的Style风格
Qstyle 类
Qstyle 类将UI 的组成元素分为三类:
(1)Primitive Elements : 基本元素,如边框,倒角,箭头等一些基本的,被多个控件所复用的元素。基本元素本身不能单独存在。
(2)Control Elements : 控件元素,如按键,复选框等,不单是这些单独的控件,也包括复杂控件中的组成元素,如滚动条中的滑块。它和基本元素不同的地方是,它能够单独处理用户交互操作。
(3)Complex Control Elements : 复杂控件元素,复杂控件元素包含有子控件元素。例如combo boxes (复合选择框)等。它的用户交互响应,取决于用户操作的对象是哪个子控件。其对应的有三个函数用于绘制这三类UI 元素。
(1)void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
(2)void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
(3)void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
具体的,可以查看QT的帮助文档。
上代码
今天我们这里用使用drawPrimitive函数去掉难看的虚线框
//去除虚线边框;
class CustomProxyStyle : public QProxyStyle
{
public:
virtual void drawPrimitive(PrimitiveElement element, const QStyleOption * option,
QPainter * painter, const QWidget * widget = 0) const
{
if (PE_FrameFocusRect == element)
{
//这里QT会绘制虚线框,而我们只需要在这里拦截掉就OK;
return;
}
else
{
QProxyStyle::drawPrimitive(element, option, painter, widget);
}
}
};
结尾
只为记录,只为分享! 愿所写能对你有所帮助。Good Good Study, Day Day Up!