如何在Qt的 paintEvent之外進行繪製 - wiki3D - 博客園
https://www.cnblogs.com/wiki3d/p/4227307.html
QPainter 默認只能在paintEvent中進行繪製
這在有些情況下會很不方便,有時候我們希望可以在任意地方直接進行繪製
爲了實現這個目的,可以採用以下方法:
繼承QWidget,通過子類提供直接繪製的方法,並將所有繪製保存到中間的QPixmap
最後在重載的paintEvent中將QPixmap複製顯示:
void resizeEvent(QResizeEvent *event)
{
if(event->size().width() > mPixmap->width() || event->size().height() > mPixmap->height())
{
QPixmap* pixmap = new QPixmap((std::max)(event->size().width(), mPixmap->width()), (std::max)(event->size().height(), mPixmap->height()));
delete mPainter;
mPainter = new QPainter(pixmap);
mPainter->drawPixmap(0, 0, *mPixmap);
delete mPixmap;
mPixmap = pixmap;
}
}
void paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0, 0, *mPixmap);
}