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);

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章