QT类学习系列(10)- QPainter使用

如何在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);

    }

 

你可能感兴趣的:(QT学习及使用)