Qt 的 paintEvent 函数小结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 的 paintEvent 函数小结相关的知识,希望对你有一定的参考价值。

参考技术A

Qt 的 paintEvent 函数小结

当产生一个绘制事件并且调用paintEvent()函数的时候,会出现如下几种情况:

< 1 > 在窗口部件第一次显示时,系统会自动产生一个绘制事件,从而强制绘制这个窗口部件本身。

< 2 > 当重新调整窗口部件大小时,系统也会产生一个绘制事件。

< 3 > 当窗口部件被其他窗口部件遮挡,然后又再次显示出来的时候,就会对那些隐藏的区域产生一个绘制事件(除非这个窗口系统存储了整个区域)。

也可以通过调用 QWidget::update() 或者 QWidget::repaint() 来强制产生一个绘制事件。它们的区别是:repaint 会强制产生一个即时的绘制事件,而 update 函数则只是在 Qt 下一次处理事件时才简单调用一个绘制事件。(如果窗口部件在屏幕上是不可见的,那么这两个函数会什么也不做。)如果多次调用 update(),Qt 就会把连续多次的绘制事件压缩成一个单一的绘制事件,这样就可以避免闪烁现象。

Qt paintEvent事件 显示图片文字

参考技术A paintEvent事件可以重新绘制全部或者部分窗口,任何从QWidget派生的类都可以进行重绘。

paintEvent事件的发生可能有以下几个原因:

(1)repaint()或者update()被调用

(2)这个窗体之前被隐藏,重新显示时

(3)或者一些其他原因(官方文档这样写的)

其中,update()不是立即调用paintEvent(),要等Qt返回主事件循环后才会进行,而调用repaint()会立即调用paintEvent()函数来重绘窗口。

在进行绘制时,通过Qpainter类进行绘图,例如通过以下函数:

(1)void drawPixmap(const QRect & rectangle, const QPixmap & pixmap):填充图片

(2)void fillRect(const QRect & rectangle, Qt::GlobalColor color):填充颜色

(3)void drawText(const QRect & rectangle, int flags, const QString & text, QRect * boundingRect = 0):t填充文字

举例:自定义按钮实现图片文字显示,其中文字显示在图片下方。

void DyClickImageButton::paintEvent(QPaintEvent *)



        QPainter painter(this);

        QPixmap pixmap;

        pixmap.load(m_picname);

        painter.drawPixmap(QRect(0,0,this->width(),pixmap.height()),pixmap);

        painter.drawText(this->rect(), Qt::AlignHCenter | Qt::AlignBottom, m_picName);



其中DyClickImageButton是从QPushButton派生出来的类,m_picname为图片的路径,当用DyClickImageButton类进行创建按钮时,将图片绘制到该按钮上。

以上是关于Qt 的 paintEvent 函数小结的主要内容,如果未能解决你的问题,请参考以下文章

qt paintEvent

QWidget 的 QT paintEvent

Qt paintEvent事件 显示图片文字

QT绘制半透明窗体(改写paintEvent,超级简单)

QT利用Qpainter怎么在多个窗口中画图 一般只能在paintEvent函数中为主窗口绘图 那怎么样在函数中

paintEvent(QPaintEvent*)是系统自动调用的