十九、Qt2D绘图(九)双缓冲绘图简介.PDFVIP

十九、Qt2D绘图(九)双缓冲绘图简介.PDF

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
十九、Qt2D绘图(九)双缓冲绘图简介.PDF

十九、Qt 2D绘图(九)双缓冲绘图简介 本文章原创于 转载请注明出处。 上面一节我们实现了涂鸦板的功能,但是如果我们想在涂鸦板上绘制矩形,并 且可以动态地绘制这个矩形,也就是说我们可以用鼠标画出随意大小的矩形, 那该怎么办呢? 我们先进行下面的三步,最后引出所谓的双缓冲绘图的概念。 第一步: 我们更改上一节的那个程序的重绘函数。 void Dialog::paintEvent(QPaintEvent *) { QPainter painter(this); int x,y,w,h; x = lastPoint.x(); y = lastPoint.y(); w = endPoint.x() – x; h = endPoint.y() – y; painter.drawRect(x,y,w,h); } 然后运行,效果如下。 这时我们已经可以拖出一个矩形了,但是这样直接在窗口上绘图,以前画的矩形 是不能保存住的。所以我们下面加入画布,在画布上进行绘图。 第二步: 我们先在构造函数里将画布设置大点:pix = QPixmap(400,400); 然后更改函数,如下: void Dialog::paintEvent(QPaintEvent *) { int x,y,w,h; x = lastPoint.x(); y = lastPoint.y(); w = endPoint.x() – x; h = endPoint.y() – y; QPainter pp(pix); pp.drawRect(x,y,w,h); QPainter painter(this); painter.drawPixmap(0,0,pix); } 这时运行程序,效果如下: 现在虽然能画出矩形,但是却出现了无数个矩形,这不是我们想要的结果,我们 希望能像第一步那样绘制矩形,所以我们再加入一个临时画布。 第三步: 首先,我们在dialog.h中的private里添加变量声明: QPixmap tempPix; //临时画布 bool isDrawing; //标志是否正在绘图 然后在dialog.cpp中的构造函数里进行变量初始化: isDrawing = false; 最后更改函数如下: void Dialog::paintEvent(QPaintEvent *) { int x,y,w,h; x = lastPoint.x(); y = lastPoint.y(); w = endPoint.x() – x; h = endPoint.y() – y; QPainter painter(this); if(isDrawing) //如果正在绘图 { tempPix=pix; //将以前pix中的内容复制到tempPix中,这样实 现了交互绘图 QPainter pp(tempPix); pp.drawRect(x,y,w,h); painter.drawPixmap(0,0,tempPix); } else { QPainter pp(pix); pp.drawRect(x,y,w,h); painter.drawPixmap(0,0,pix); } } void Dialog::mousePressEvent(QMouseEvent *event) { if(event-button()==Qt::LeftButton) //鼠标左键按下 { lastPoint = event-pos(); isDrawing = true; //正在绘图 } } void Dialog::mouseMoveEvent(QMouseEvent *event) { if(event-buttons()Qt::LeftButton) //鼠标左键按下的同时移动鼠标 { endPoint = event-pos(); update(); } } void Dialog

文档评论(0)

tangtianbao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档