文档章节

Qt之旅---10 双缓冲绘图

OSC_JSON
 OSC_JSON
发布于 2018/06/01 22:25
字数 266
阅读 61
收藏 0

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

© 著作权归作者所有

OSC_JSON
粉丝 0
博文 34
码字总数 13195
作品 0
贵阳
程序员
私信 提问
【QT技术应用】2D绘图

2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等...

长平狐
2012/09/03
1K
0
【Qt笔记】Qt 绘制系统简介

Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于,和三个类。 用来执行绘制的操作;是一个二维空间的抽象,这个二维空间允许在其上面进行绘制,也就是工...

大道无名
2016/07/30
126
0
android 使用双缓冲辨析及surfaceview使用例程-转载(觉得写的很清楚)

本文转自:http://blog.csdn.net/blogercn/article/details/7404485 感谢作者分享! 双缓冲是图像编程中很重要的概念,在电脑的图像处理中就常常使用双缓冲来加快图像显示速度,消除图像刷新...

LiangX
2013/05/28
783
0
使用双缓存解决 Canvas clearRect 引起的闪屏问题

前言 今天用 canvas 做 H5 的时候遇到了闪屏问题。闪烁效果如下图: 问题简介 功能简介 H5 该部分的功能为:通过点击二级菜单,切换图片的遮罩或者更换背景。 因为功能简单,所以用了原生 ca...

NingBo
04/28
0
0
Qt5 绘图 - 利用 QPixmap 和 QPainter 实现在 paintevent() 函数外绘图

Qt5 绘图 - 利用 QPixmap 和 QPainter 实现在 paintevent() 函数外绘图 Qt 的绘图操作,是使用 QPainter 在 paintevent() 函数中进行的,所有绘图操作都要放进函数 paintevent() 中。 在实际...

sigmarising
2018/04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部