zoukankan      html  css  js  c++  java
  • 【Qt官方例程学习笔记】Raster Window Example(画笔的平移/旋转/缩放应用)

    这个例子显示了如何使用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()来立即呈现窗口。

  • 相关阅读:
    简单的react-dom.js react.js 中的源码手写
    回顾vue源码理解到哪记录到哪
    一道很有纪念意义的算法题之多维数组去重,不降维
    下载文件.xlsx .csv 或者下载压缩包
    koa+mysql简单实现查询功能
    幽灵空白节点解决方案,史上最明白
    useCallback,useMemo源码
    useContext源码解读
    useEffect源码
    Hadoop 学习笔记(二)Hadoop 本地运行环境搭建及简单应用
  • 原文地址:https://www.cnblogs.com/pplxlee/p/11013073.html
Copyright © 2011-2022 走看看