1 基本知识

但我们使用painter进行快速绘图时会看到类似图下 的情况

双缓冲绘图技术 的原理 用两个画布进行绘图,一个用于显示,一个用于绘制,也就是将图画之后再显示

就可以避免上面的情况。

2 源码

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    isDrawing=false;
    //重设窗口大小
    resize(600,500);
    //设置画布大小
     pix=QPixmap(200,200);
pix.fill(Qt::white);

isDrawing=false;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void  MainWindow::paintEvent(QPaintEvent *){
int x,y,h,w;
  x=lastpoint.x();
  y=lastpoint.y();
  w=endtpoint.x()-x;
  h=endtpoint.y()-y;

//绘图设备
  QPainter pait(this);
  if(isDrawing)
  {
      //将pix 复制到 tmpPix(补助画布)中 保存让以前 的画不消失
      tmpPix=pix;
      QPainter pp(&tmpPix);
      pp.drawRect(x,y,w,h);
      pait.drawPixmap(0,0,tmpPix);
  }
  else{

QPainter  pp(&pix);
      pp.drawRect(x,y,w,h);
      pait.drawPixmap(0,0,pix);
  }

}

void  MainWindow::mousePressEvent(QMouseEvent *event){
    if(event->button()==Qt::LeftButton){
        lastpoint==event->pos();
        isDrawing=true;
        update();
    }
}

void  MainWindow::mouseReleaseEvent(QMouseEvent *event){
    if(event->button()==Qt::LeftButton)
    {

endtpoint=event->pos();
        isDrawing=false;
        update();
    }
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{

if(event->buttons()==Qt::LeftButton)
    {

endtpoint=event->pos();
        update();
    }
}

Demo22 地址:https://gitee.com/codemaner/qt_learning_record/tree/master

转载于:https://my.oschina.net/u/3768017/blog/1822857

Qt之旅---10 双缓冲绘图相关推荐

  1. [Qt教程] 第18篇 2D绘图(八)双缓冲绘图

    [Qt教程] 第18篇 2D绘图(八)双缓冲绘图 楼主  发表于 2013-5-2 22:07:23 | 查看: 789| 回复: 1 双缓冲绘图 版权声明 该文章原创于Qter开源社区(www.qt ...

  2. Qt组件中的双缓冲无闪烁绘图

    双缓冲绘图 在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图.使用双缓冲,可以减轻绘制的闪烁感.在有些情况下,用户要关闭双缓冲,自己管理绘图.下面的语句设置了窗口部件的Qt::WA_PaintOnS ...

  3. 【Qt】2D绘图之双缓冲绘图

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制矩形 04. 双缓冲绘图 05. 附录 01. 概述 所谓的双缓冲绘图的概念.双缓冲(double-buffers)绘 ...

  4. 【QT】QT从零入门教程(十三):QT画笔工具QPainter (双缓冲绘图)

      QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage.QOpenGLPaintDevice.QWidget 和QPaintDevice 显示图形(线.形状.渐变等). ...

  5. MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    转载自:ZHY_ongu的博客:MFC绘制动态曲线,用双缓冲绘图技术防闪烁 先上效果图    随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线. 所谓动画,都是一帧一帧 ...

  6. VC中的双缓冲绘图技术

    之前在做图形绘制的时候,发现在拖动图形时候,会出现闪烁的情况,后来就上网找了一下双缓冲绘图,本文非原创,只是想保存下来,以后要用的时候不用再到处去搜,也希望能帮助有这方面困惑的朋友 原文来自http: ...

  7. android双缓冲绘图技术分析

    转载请说明出处:http://www.jianshu.com/p/efc0bebfd22e 双缓冲.多缓冲技术在计算机科学中其实是一个广义的概念,不过其本质上的意思都是差不多的.今天我们就来讲一讲双缓 ...

  8. c语言双缓冲怎么用,C语言游戏编程:GDI怎么实现双缓冲绘图去掉闪烁

    在上篇文章中将我要用 C语言重新写一个俄罗斯方块 ,使用的是GDI的绘图模式(目前正在移植到DX上去,想添加一些更好友好的动画).数据与动画分离,动画的帧率保持在30左右.但是绘图的时候画面出现了强烈 ...

  9. Cimage下实现双缓冲绘图

    双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度. 双缓冲绘图的步骤: 1.在内存中创建与画布一致的 ...

最新文章

  1. Mac-sublime text 3破解版
  2. 常用工具之zabbix
  3. check_mk通用应用检测插件
  4. IIS FTP部分文件上传报错451的原因及解决方法
  5. 小米3g刷高格固件_小米路由器3G刷了老毛子之后恢复官方固件
  6. php 扩展 返回字符串,基于PHP7的PHP扩展开发之四(字符串的处理)
  7. linux select shell,linux之shell编程select和case用法
  8. Guava RateLimiter限流原理解析
  9. mysql binlog查看_MySQL--17 配置binlog-server 及中间件
  10. ZYNQ学习心得梳理(一)
  11. OSM获取城市路网数据及其矢量化
  12. 重磅!Waymo首席执行官离职,自动驾驶商业化打上“问号”
  13. 为什么说社群团购时代来临了?
  14. eNSP 路由器配置-静态路由和缺省路由
  15. linux 锐捷客户端 脚本,基于802.1x的锐捷linux客户端认证方法(最新)
  16. 后台获取前台传递参数为null和空字符串的区别,以及sql拼接之if判断
  17. 正则表达式(regular expression [regExp])
  18. html静态页面--对我的idol相关内容的集合页面(徐明浩the 8)
  19. 阿里云Apsara Clouder专项技能认证-实现调用API接口-学习笔记
  20. 揭秘!量子计算的可怕之处在哪?摩尔定律到达极限会发生什么?

热门文章

  1. python spss,有没有一个Python模块打开SPSS文件?
  2. 20221024 今天的世界发生了什么
  3. python获取字典长度_Python中的字典
  4. CV_8U CV_32F, and CV_32S
  5. Vue修改网页浏览器标签的标题和图标
  6. es的分片和副本_Elasticsearch 索引分片与副本设置技巧
  7. 我的第一个Chrome插件:天气预报应用
  8. Charles 连接 雷电模拟器(模拟器下载证书)
  9. 【科研绘图封面教程】C4D+PS教学绘制优秀期刊封面第一期
  10. nginx处理http请求