Qt自定义折线图控件

本文详细介绍了如何使用Qt创建自定义的动态和静态折线图控件,涵盖坐标轴绘制、缩放、拖拽、数据点查询等功能。通过理论学习和代码实战,展示了界面美化及部分刷新技术,提供了丰富的示例和应用场景。
摘要由CSDN通过智能技术生成

目录

 

基础效果图

前言

设计要点

界面

功能

理论学习

代码实战

界面的美化

动态折线图

坐标轴的绘制

缩放

拖拽

数据点的查询

静态折线图

扩展应用

总结

demo下载


基础效果图

 

前言

使用Qt自定义折线图,可以自己控制折线图的重绘规则,究竟是每添加一个数据就刷新整个折线图,还是只刷新部分折线图。

我把折线图分为以下两类:

  1. 坐标系是静态的,折线图更新快。
  2. 坐标系是动态的,数据的变化更为明显。

 

设计要点

界面

1.线型的美化

2.给每个数据点设置一个圆点,突出一下

功能

1.坐标轴的绘制

2. 缩放

3. 拖拽

4.数据点的查询

理论学习

这里只总结这一次代码需要知道的理论知识,带着问题去学习。

问题1:QT窗口的刷新机制,何时会进入paintEvent?

void QWidget:paintEvent(QPaintEvent *event) [virtual protected]

 

这个event函数可以被它的子类重构,以接收处理重绘事件。

这个函数被调用的场景包括以下几种:

repaint()或者update()被调用时

这个控件出现且没有被其他窗口挡住。

其他原因比如界面的缩放、移动等

许多控件被要求重绘时,都会重绘整个界面,但是有些控件可能需要优化重绘,于是,我们可以通过设置QPaintEvent::region(),这样就可以只更新指定的区域。

Qt也支持将多个区域的重绘合并为一个区域的重绘,当update()函数被调用多次或者窗口系统发送了多次paint事件,Qt会将涉及到的区域合并为一个更大的区域。但是repaint()函数不会有以上的优化,每次它被调用就会立刻以最快速度重绘需要重绘的区域,所以Qt建议不管什么情况下,都尽量使用update()函数。

当重绘事件发生时,被更新的区域首先会被擦除,但你可以自定义控件的背景。

注意:自Qt 4.0 版本开始,QWidget就已经自动实现了双缓存,所以编程人员不需要为了避免界面闪烁,而在paintEvent()函数中编写有关双缓存的代码。

 

问题2:QPainter的使用

       绘制折线图,主要用到QPainter的四个函数,分别起:构造、绘制直线、绘制字符串的作用、绘制圆。

问题3:怎么做到“部分刷新”以节约时间。

  setAttribute(Qt::WA_OpaquePaintEvent);        //实现部分重绘

 

代码实战

界面的美化

这里只提一个,就是线型的美化,用QPainter去绘制直线时,如果直接使用,绘制的线性会受画线的规则影响,加一个设置之后,可以美化直线,当然,缺点就是:多了运算量,目的是通过消除锯齿现象来美化直线。

美化时需要对QPainter进行设置:


    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);    //添加反走样可以使线型更加好看

美化前后对比图:

美化前
美化前
美化后
美化后

             图中,因为数据源是随机产生的,所以前后数据不一致,但是光是从这两张图里,我们也可以可以看出第一张图里边,锯齿现象非常明显,而图二通过颜色的重新计算,用明亮度消除了锯齿带来的不良影响。

            可能有人会想问,为什么不默认打开反走样呢?

这是因为,反走样是一种比较复杂的算法,在一些对图像质量要求不高的应用中,是不需要进行反走样的。
为了提高效率,一般的图形绘制系统,如Java2D、OpenGL之类都是默认不进行反走样的。
还有一个疑问,既然反走样比不反走样的图像质量高很多,不进行反走样的绘制还有什么作用呢?
前面说的是一个方面,也就是,在一些对图像质量要求不高的环境下,或者说性能受限的环境下,
比如嵌入式和手机环境,是不必须要进行反走样的。另外还有一点,在一些必须精确操作像素的应用中,
也是不能进行反走样的。
[整理自:https://blog.csdn.ne
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
### 回答1: Qt是一种非常流行的跨平台应用程序框架,用于开发GUI程序和其他类似的应用程序。Qt具有良好的跨平台性、可扩展性和易用性,因此被广泛应用于桌面和嵌入式设备的开发。Qt自定义控件的开发是一大亮点。下面我们将介绍10套精美自定义控件的demo源码,希望能对开发小伙伴们有所帮助。 1. 按钮控件:这个包括多种类型的自定义按钮,如圆角按钮、悬浮按钮等。 2. 折叠面板控件:这个可以让用户输入大量内容时,将内容组织成更加紧凑的形式。 3. 时间轴控件:这个可以在应用程序中创建时间轴来表现时间序列数据。 4. 旋转菜单控件:这个提供了一个非常炫酷的菜单,菜单项可以在旋转过程中呈现出动态效果。 5. 音频波形控件:这个提供了一个实时音频波形显示控件。 6. 媒体播放器控件:这是一个可以播放音频和视频文件的完整的媒体播放器控件。 7. 气泡提示控件:这个可用于在用户界面中显示气泡提示。 8. 图形绘制控件:这个包括多个绘图控件,如标签、图表、画板等。 9. 数据可视化控件:这个可用于创建各种类型的数据可视化图表,如饼图、柱状图、折线图等。 10. 个性化样式控件:这个可以实现各种自定义样式的控件,使你的应用程序更具个性。 ### 回答2: Qt是一个非常流行的跨平台C++应用程序开发框架。最近,很多开发者开始使用Qt进行自定义控件的设计和制作。为了帮助这些开发者更快地完成控件的设计和开发,有一些Qt精美自定义控件十套demo源码可以供他们参考。 这些源码中包含了很多不同类型的控件,如:音乐播放器、绘画面板、地图控件、电影预览控件等。每个控件都非常的精美,拥有非常流畅的动画和用户体验。在学习这些源码时,你可以学习到很多Qt控件的基础和高级概念,包括UI设计、控件连接、事件响应等。 除此之外,这些源码还会借助许多出色的开源,如OpenCV、FFmpeg、OpenGL等。这让这些demo源码非常的实用性和有趣。通过学习这些源码,您将有机会了解到如何结合这些来开发出更加高级的Qt控件,而这些控件将更加符合现代用户对于应用程序的要求。 总之,这十套Qt精美自定义控件的demo源码给了Qt控件开发者们非常好的参考和学习素材。如果您想要进一步了解Qt控件的制作和设计,这些源码是一个非常值得学习的资源。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值