网站开发域名,手机网站百度关键词排名,北滘大良网站制作,厦门设计公司有哪些这个例子显示了如何使用QPainter渲染一个简单的QWindow。 值得学习的内容 <QtGui>头文件 #include <QtGui>就可以使用Qt GUI模块中的所有类,当然,愿意的话也可以分开各个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