博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Qt官方例程学习笔记】Raster Window Example(画笔的平移/旋转/缩放应用)
阅读量:6241 次
发布时间:2019-06-22

本文共 1398 字,大约阅读时间需要 4 分钟。

这个例子显示了如何使用QPainter渲染一个简单的QWindow。

值得学习的内容

<QtGui>头文件

#include <QtGui>就可以使用Qt GUI模块中的所有类,当然,愿意的话也可以分开各个include。

QBackingStore与绘制

用于管理基于QPainter的图形的窗口后缓冲区。

在RasterWindow构造函数中,我们创建backingstore并将它应该管理的窗口实例传递给它。

RasterWindow::RasterWindow(QWindow *parent)      : QWindow(parent)      , m_backingStore(new QBackingStore(this))  {      setGeometry(100, 100, 300, 200);  }

resize时,也应该调整后缓冲区大小

void RasterWindow::resizeEvent(QResizeEvent *resizeEvent)  {      m_backingStore->resize(resizeEvent->size());  }

绘制

void RasterWindow::renderNow()  {      if (!isExposed())          return;      QRect rect(0, 0, width(), height());      m_backingStore->beginPaint(rect);      QPaintDevice *device = m_backingStore->paintDevice();      QPainter painter(device);      painter.fillRect(0, 0, width(), height(), QGradient::NightFade);      render(&painter);      painter.end();      m_backingStore->endPaint();      m_backingStore->flush(rect);  }

isExposed()保证窗口可见时才绘制。

 

异步渲染:让重绘发生在事件循环中(QWindow::requestUpdate())

void RasterWindow::renderLater()  {      requestUpdate();  }

我们通过使用QWindow::requestUpdate()请求更新来实现这一点,当系统准备重新绘制时,将交付重绘。

bool RasterWindow::event(QEvent *event)  {      if (event->type() == QEvent::UpdateRequest) {          renderNow();          return true;      }      return QWindow::event(event);  }

当发生UpdateRequest事件,窗口重绘时,调用renderNow()来立即呈现窗口。

 

转载于:https://www.cnblogs.com/pplxlee/p/11013073.html

你可能感兴趣的文章
JAVA线程异常终止
查看>>
dede 伪静态
查看>>
linux里source、sh、bash、./有什么区别
查看>>
windows安装MongoDB
查看>>
Silverlight4 Framework 之困局
查看>>
最小二乘法之一元线性拟合
查看>>
wordpress如何添加调用侧边栏小工具功能
查看>>
ffmpeg 屏幕录像
查看>>
mapreduce如何调用第三方jar包
查看>>
Java编码风格
查看>>
Spring MVC防御CSRF、XSS和SQL注入攻击
查看>>
gcc命令使用记录
查看>>
下载网络文件HttpURLConnection.getContentLength()大小为 -...
查看>>
linux文件设备与I/O:read/write函数 与 阻塞 Block
查看>>
在Tomcat中部署Web程序的几种方式
查看>>
javascript常用命令
查看>>
Cocos2d-X游戏开发(一):搭建Cocos2d-X开发环境
查看>>
Linux: devfs, devtmpfs and udev
查看>>
nginx 日志切割
查看>>
objective-c 数据类型和限定词对应关系
查看>>