[发明专利]基于Qt的多线程绘图方法有效
申请号: | 201010571103.5 | 申请日: | 2010-12-03 |
公开(公告)号: | CN102486726A | 公开(公告)日: | 2012-06-06 |
发明(设计)人: | 杨若海;黄国勇 | 申请(专利权)人: | 北京晶智意达科技有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100191 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 qt 多线程 绘图 方法 | ||
技术领域
本发明是一种基于Qt的多线程绘图方法,属于计算机辅助设计CAD领域,主要用于CAD绘图编辑工具的实现。
背景技术
很多计算机辅助设计CAD应用程序都需要在屏幕上显示绘制大量的图形,由于信息量比较大,刷新的时间可能会比较长,此时图形界面通常无法对用户输入进行及时响应。如何能够提高绘图的效率,并且提供更好的使用感受,是本发明要解决的问题。
Qt是为开发跨平台的图形用户界面应用程序提供的一个完整的C++应用程序开发框架,它提供了绘制图形的接口,可以在应用程序中提供多线程以及线程通信和同步的机制。
发明内容
本发明的目的在于:为基于Qt的应用程序提供一种多线程的绘图方法,与传统的单线程应用程序相比,将比较耗时的绘图操作放置在一个独立的子线程中完成,与此同时可以使主线程回到Qt的事件循环中,继续响应用户输入,使得用户界面不至于有被锁死的感觉。当绘图子线程完成或者被中断的时候,需要进行线程之间的通信和同步,主要利用Qt的信号-槽机制来实现。
图1是绘图方法的体系结构图。当一个绘图区域需要刷新的时候,Qt系统会产生一个暴露事件,在处理该事件的时候,会告知应用程序生成一个绘图子线程,该线程的接口是预先定义好的,当子线程建立之后立刻开始绘图工作,完成之后会自动销毁;主线程继续监控新的Qt事件,还设计有一个定时器,它控制每隔一段时间就将子线程已经绘制好的部分图形拷贝到屏幕上,这样使用者就可以及时看到刷新的结果。
附图说明
图1是绘图方法的体系结构图
图2是完成一次刷新操作的流程图
具体实施方式
图2完成一次刷新操作的具体流程。QWidget是Qt系统中基本图形界面组件,当它捕捉到一个暴露事件后,会发出一个重画/刷新的信号,然后将主线程的控制权返回到Qt事件循环中;应用程序收到信号以后,会生成一个绘图子线程,子线程是通过重载Qt的子线程类QThread来实现的;当子线程启动后,会开始绘图的工作,绘制的图形并不直接反应到屏幕窗口上,而是先存放在一个私有的脱屏缓冲区中,线程私有的脱屏缓冲区在两种情况下会与公共的缓冲区合并再拷贝到屏幕上:一是子线程结束,一是受计时器的控制;由于多线程的机制,所以绘图过程是可以被中断的,中断可以来源于使用者的输入,当Qt事件循环收到一个中断事件后,会设置一个标志,子线程读到该标志后会立刻结束;脱屏缓冲区是与窗口屏幕尺寸相同的一个结构,当缓冲区准备好之后再拷贝到屏幕上可以减小闪烁感。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京晶智意达科技有限公司,未经北京晶智意达科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010571103.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:音乐阶梯
- 下一篇:补偿LED背光导通压降差异的电路