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()来立即呈现窗口。

  • 相关阅读:
    pyqt5开发之俄罗斯方块
    Tkenter之API测试系统界面设计
    Python的标准GUI:Tkinter的组件
    Python单元测试框架——unittest
    【Android】自定义ListView的Adapter报空指针异常解决方法
    5、使用Libgdx设计一个简单的游戏------雨滴
    4.6、Libgdx线程介绍
    4.5、Libgdx运行日志管理
    4.4、Libgdx使用方法查询运行环境相关属性
    4.3、Libgdx启动类和配置
  • 原文地址:https://www.cnblogs.com/pplxlee/p/11013073.html
Copyright © 2011-2022 走看看