当前位置: 首页 > news >正文

网站开发域名/手机网站百度关键词排名

网站开发域名,手机网站百度关键词排名,北滘大良网站制作,厦门设计公司有哪些这个例子显示了如何使用QPainter渲染一个简单的QWindow。 值得学习的内容 <QtGui>头文件 #include <QtGui>就可以使用Qt GUI模块中的所有类&#xff0c;当然&#xff0c;愿意的话也可以分开各个include。 QBackingStore与绘制 用于管理基于QPainter的图形的窗口后缓…

这个例子显示了如何使用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

相关文章: