开始

使用QPainter画图,需要继承QWidget,重写paintEvent()虚函数,在里面进行绘图。

或者可以考虑绘制到QImage或者QPixmap上面,然后在paintEvent()里面调用QPainter的绘制图像的函数。

场景

//安装事件过滤器
ui->view->installEventFilter(this);

  

//过滤
bool SemiA9120::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->view && event->type() == QEvent::Paint)
{
paintonPolarPlot();
} return true;/*返回 true:告诉Qt已经处理的这个事件*/
}

 

--------------------------------线程中---------------------------

	g_testMutex.unlock();
//触发信号
ptr->sign_redrawPolar();

  

//信号-槽函数连接
QObject::connect(this,SIGNAL(sign_redrawRect()),this,SLOT(paintonPolarPlot()));

 后来用了update()触发重绘事件

后记

update()允许Qt来优化速度并且防止闪烁。

repaint()是立即调用paintEvent(),而update()是几次执行才调用一次paintEvent()。

paintEvent()

paintEvent()是一个虚函数槽(slot),子类可以对父类的paintEvent进行重写。

当调用update(),repaint()的时候,paintEvent()会被调用,另外,当界面有任何改变的时候,paintEvent()也会被调用,这种界面的改变包括界面从隐藏到显示,界面尺寸改变,当然还包括界面内容改变的时候会被调用。

paintEvent()是已经被高度优化过的函数,它本身已经自动开启并实现了双缓冲(X11系统需要手动去开启双缓冲),因此Qt中重绘不会引起任何闪烁。

update()和repaint()

update和repaint是一类的,需要重绘的对象主动去调用,然后重绘。update和repaint调用之后,都会去调用paintEvent()

update()跟repaint()比较,update则更加有优越性。update()调用之后并不是立即重绘,而是将重绘事件放入主消息循环中,由main的event loop来统一调度的(其实也是比较快的)。update在调用paintEvent之前,还做了很多优化,如果update被调用了很多次,最后这些update会合并到一个大的重绘事件加入到消息队列,最后只有这个大的update被执行一次。同时也避免了repaint()中所提到的死循环。因此,一般情况下,我们调用update就够了,跟repaint()比起来,update是推荐使用的。

最新文章

  1. JDBC的操作
  2. socket编程进阶
  3. Java笔记8-抽象接口
  4. C++混合编程之idlcpp教程Lua篇(7)
  5. DOM_01之树及遍历
  6. Java 线程 — ScheduledThreadPoolExecutor
  7. 在Word2013中多次应用格式刷
  8. C# C++联调
  9. COGS 2479 偏序 题解
  10. Dinic 算法
  11. php win主机下实现ISAPI_Rewrite伪静态
  12. linux之SQL语句简明教程---UNION ALL
  13. Servlet的ClassLoader
  14. IT术语的正确读法
  15. Codeforces 1093D. Beautiful Graph【二分图染色】+【组合数】
  16. OCP-第三节课.md
  17. antd在webpack里面的配置
  18. pycharm的小问题之光标
  19. BZOJ 3878 【AHOI2014】 奇怪的计算器
  20. 使用JavaScript实现表现和数据分离

热门文章

  1. JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理
  2. CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录
  3. CentOS 7系统中的时间日期设置
  4. 强哥MySQL学习笔记
  5. centos7下iperf的安装
  6. SUSE12 网卡配置、SSH远程配置、解决CRT密钥交换失败,没有兼容的加密程序
  7. opencv——PCA(主要成分分析)数学原理推导
  8. Jmeter+Ant+Jenkins接口自动化框架
  9. MySQL 通过.frm文件和.ibd文件实现InnoDB引擎的数据恢复
  10. Python+Selenium - js操作