绘制自定义QSlider

文章介绍了如何在Qt中通过自定义样式类SliderStyle实现滑动条、滑块和刻度的显示效果,包括让滑块跟随鼠标左键点击移动、绘制刻度和文字、添加滑块颜色变化的hover效应。此外,还展示了如何在刻度下方显示文字,并通过事件处理实现滑动条上方的tooltip悬浮显示当前刻度值。
摘要由CSDN通过智能技术生成

通过自定义style,可以实现自定义滑动条、滑块、刻度(节点)的显示效果,可以使滑块移动至鼠标左键点击处。效果图如下:

如果只是想让滑块跟随鼠标左键点击移动,还可以通过事件进行处理。qt的基础控件支持的是鼠标中键移动滑块,我们只需要转换一下事件类型即可:

如果我们还想要在刻度下面显示文字,应该如何处理?

代码如下:

效果如下:

再进一步,如果我们想要在滑动条上方显示tooltip悬浮显示效果,显示当前刻度的值,应该怎么做呢,因为在实际运用当中,可能无法给每个刻度都绘制文字效果,比如在以上的例子中,如果文字内容不是000,111....而是000000,1111111.....这时由于刻度内容较长,如果每个刻度都绘制文字,会导致文字内容叫错在一起,这时一般只在第一个刻度和最后一个刻度下绘制文字,其余地方通过tooltip显示文字内容。

这里展示tooltip的实现:

实际效果如下:

这里只是介绍实现的原理,如果要用到实际的工程项目中,颜色、刻度样式,代码封装、坐标计算等都需要根据实际场景进行优化调整。如果觉得tooltip样式不够好看,也可以自定义或者使用QLabel进行文字提示显示,显示的方案是一样的。

好了,以上的自定义qslider基本包括了所有日常项目中有可能遇到的需求:滑块跟随鼠标点击、自定义滑块、刻度、滑动条样式、文字绘制、tooltip显示等。

后面又想到一个可能的需求,如果要使鼠标移动到滑块上时,使滑块颜色加深,类似与点击效果,应该怎么做呢?

首先安装事件过滤器:

安装事件过滤器的目的是使鼠标进入时触发update进一步触发drawComplexControl。

(不应该自动触发 吗?也许要设置某些参数,暂时使用该方案。)

然后修改drawHandle函数,增加一个判断是否为hover的参数:

实现hover叠加:

常态:

hover态:

选中态:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值