`
美丽的小岛
  • 浏览: 310757 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Qt paintevent事件[转]

    博客分类:
  • QT
 
阅读更多

一.主要理解一下几个方法和属性:

1.QWidget * QScrollView::viewport () const

2.void QWidget::paintEvent ( QPaintEvent * ) [虚 保护]

3.void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽]

4.void QWidget::update () [槽]

5.void QWidget::erase ( int x, int y, int w, int h )

6.bool updatesEnabled

二.现分别详细介绍:

1.QWidget * QScrollView::viewport () const

返回滚动视图中的视口窗口部件,这个窗口部件包含内容窗口部件或者要画的区域。

2.void QWidget::paintEvent ( QPaintEvent * ) [虚 保护]

只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它。这个事件处理器可以在子类中被重新实现来接收绘制事件。 它可以是repaint()或update()的结果。 很多窗口部件在当它们被请求时,它们很简单地重新绘制整个界面,但是一些窗口部件通过仅仅绘制被请求的区域QPaintEvent::region()进 行优化,例如,QListView和QCanvas就是这样做的。

Qt也可通过把多个绘制事件合并为一个来加快绘制速度。当update()被调用几次或者窗口系统发送几次绘制事件,Qt把它们合并为 一个比较大区域(请参考QRegion::unite())的一个事件中。repaint()不允许这样优化,所以只要可能我们尽量使用update ()。

当绘制事件发生,更新区域通常被擦除。这里有一些例外,通过QPaintEvent::erased()可以得知这个窗口部件是否被擦除。

3.void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽]

通过立即调用paintEvent()来直接重新绘制窗口部件,如果erase为真,Qt在paintEvent()调用之前擦除区域 (x,y,w,h)。 如果w是负数,它被width()-x替换,并且如果h是负数,它被height()-y替换。 如果你需要立即重新绘制,建议使用repaint(),比如在动画期间。在绝大多数情况下,update()更好,因为它允许Qt来优化速度并且防止闪 烁。 警告:如果你在一个函数中调用repaint(),而它自己又被paintEvent()调用,你也许会看到无线循环。update()函数从来不会产生 循环。

4.void QWidget::update () [槽]

更新窗口部件,当Qt回到主事件中时,它规划了所要处理的绘制事件。这样允许Qt进行优化从而得到比调用repaint()更快的速度和更 少的闪烁。 几次调用update()的结果通常仅仅是一次paintEvent()调用。 Qt通常在paintEvent()调用之前擦除这个窗口部件的区域,仅仅只有在WRepaintNoErase窗口部件标记被设置的时候才不会。

5.void QWidget::erase ( int x, int y, int w, int h )

在窗口部件中擦除指定区域(x, y, w, h),并不产生绘制事件。

如果w为负数,它被width()-x替换。如果h为负数,它被height()-y替换。

子窗口部件不被影响。

6.bool updatesEnabled

这个属性保存的是更新是否生效。

如果更新失效,调用update()和repaint()是没有效果的。如果更新失效,来自窗口系统的绘制事件会被正常处理。 setUpdatesEnabled()通常被用于在一小段事件内使更新失效,例如为了避免在大的变化期间发生屏幕闪烁。

实例:

    setUpdatesEnabled( FALSE );

    bigVisualChanges();

    setUpdatesEnabled( TRUE );

    repaint();

通过setUpdatesEnabled()设置属性值并且通过isUpdatesEnabled()来获得属性值。

分享到:
评论

相关推荐

    Qt+update函数+paintEvent事件

    在Qt框架中,`update()`函数和`paintEvent()`事件是进行界面绘制和更新的核心机制。本文将深入探讨这两个概念,以及它们如何协同工作来实现动态用户界面。 首先,我们来理解`update()`函数。在Qt中,所有的窗口部件...

    qt重写paintEvent实现鼠标拖动绘制直线、矩形和圆

    代码用了抽象的概念,将三种图形抽象成了一个myShape,在代码中的体现就是定义了一个基类myShape类,其他所有的图像类都继承自这个基类,然后在每个子类中都添加了drawShape()方法,这样在界面的paintEvent...

    Qt事件处理之鼠标处理事件

    - **绘图事件**:通过`paintEvent`函数,我们可以重绘窗口的内容。这在创建自定义控件或动态图形时非常有用。`QPainter`类提供了丰富的绘图API,支持线条、形状、文本和图像的绘制。 - **定时事件**:Qt提供`QTimer...

    Qt绘制电池进度条(paintEvent)

    在Qt编程中,`paintEvent`是一个非常关键的事件处理函数,它用于处理图形界面的绘制。本项目中,我们创建了一个自定义的电池进度条控件,它不仅能够显示电池的当前电量,还能通过颜色变化来区分正常状态和警示状态,...

    Qt事件机制浅析

    - 更新事件:当需要重新绘制屏幕时,通过调用`QWidget::update()`来生成一个`paintEvent`事件; - 重绘事件:通过`QWidget::repaint()`直接触发,不会将事件放入消息队列中,而是直接被派发和处理。 #### 三、事件...

    Qt绘制图形随机验证码(paintEvent)

    实现了一些角度随机旋转、噪点绘制的方法,通过使用随机数随机选中范围中的值和颜色,并对值进行随机的角度旋转,再加上一些起干扰效果的噪点,把绘制路径记录下来,在paintEvent事件里面绘制行形成的图形。...

    QT编程----事件

    例如,QWidget::update() 函数当需要重新绘制屏幕时,程序调用 update() 函数其实现的原理是 new 出一个 paintEvent,调用 QApplication::postEvent(),将其放入 QT 的消息队列中,等待依次被处理。 Sent 事件由 QT...

    qt绘图事件和定时器事件制作简易时钟

    本项目通过结合Qt的绘图事件和定时器事件,实现了一个简易时钟的制作。下面我们将详细探讨这两个关键概念以及如何在实际编程中运用它们。 1. **Qt绘图事件(Paint Event)** Qt的绘图事件是GUI编程中的重要组成...

    QT实现画板功能-QPainter方法

    实现mouseMoveEvent鼠标移动事件当我们的鼠标发生移动的时候记录两个坐标值,一个为移动起始坐标,一个为移动后的坐标,然后调用update重新绘画我们的页面,在paintEvent绘画事件中我们使用QPainter绘画直线,因为...

    纯Qt实现图像的读取、鼠标位置缩放图像、移动图像

    在本文中,我们将深入探讨如何使用Qt框架来实现图像的读取、鼠标位置下的图像缩放以及图像的移动。Qt是一个跨平台的应用程序开发框架,广泛应用于GUI编程,支持多种操作系统,包括Windows、Linux和macOS等。 首先,...

    Qt360度旋转图片

    在Qt中,`paintEvent()`函数是用于处理窗口或控件的绘图事件的关键。当你想要自定义控件的外观,如绘制动态的旋转图片时,就需要重写这个函数。在这个函数中,我们可以使用`QPainter`类来执行实际的绘图操作。 接着...

    Qt在子部件上画图(QFrame)实现

    对于`QFrame`,我们需要覆盖`paintEvent()`函数,这是Qt为处理窗口部件绘图所触发的事件。 在`QFrame`的子类中,我们可以这样做: ```cpp class MyFrame : public QFrame { Q_OBJECT public: explicit MyFrame...

    Qt自定义图形实现拖拽效果

    首先定义类来自定义图形,这里通过paintEvent事件来实现(主要就是绘画一个图形) void QEventView::paintEvent(QPaintEvent *event) { resize(115+m_iLen,36); QPainter painter(this); painter.setRenderHint...

    Qt绘制曲线统计图(paintEvent)

    本统计图是一个填充了渐变颜色的曲线统计图,X轴显示了从今天往前倒推一周的日期,Y轴则显示的是时间的统计,目前只做了统计到“分”的计算,可以用于统计一周的运动时间、学习时间等...开发环境用的Qt5.5.1+MSVC2013。

    QT学习之重写鼠标移动事件

    在QT编程中,`mouseMoveEvent`和`paintEvent`是两个非常重要的事件处理函数,它们主要用于图形界面的交互和绘制。本篇文章将深入探讨如何利用这两个事件来实现在鼠标移动过程中实时显示鼠标所在位置坐标的特性。 ...

    使用paintEvent绘制简单线段

    在Qt编程中,`PaintEvent`是一个非常关键的事件,用于处理图形界面的绘制工作。当我们需要自定义控件的显示样式或者实现复杂的图形绘制时,通常会涉及到对`paintEvent`的重写。本教程将详细介绍如何使用`paintEvent`...

    基于QT的圆形旋钮

    总之,基于QT的圆形旋钮设计和实现涉及到了图形界面设计、自定义绘图、事件处理、用户交互等多个方面,是QT开发中一种具有挑战性和实用性的实践。通过理解QT的基本原理和API,开发者可以创造出各种符合用户需求的...

    Qt坐标系转换(绘制逻辑坐标系)

    本资源为Qt绘图基础,世界坐标系转换为逻辑坐标系。世界坐标系原点在视图左上角,本例子通过世界坐标转换,将坐标原点定位在视图中央,Y轴向上,X轴向右,并绘制坐标轴,基于逻辑坐标系下的绘图,可将转换关系函数...

    Qt 使用QPainter类在子控件上画图

    本文将深入探讨如何在有事件过滤器影响的环境下,通过eventFilter函数在Qt子控件上正确地使用QPainter进行画图。 首先,我们需要理解Qt中的事件过滤器机制。事件过滤器是一种可以监听并处理其他对象事件的方法,...

    Qt自绘控件-旋转的时钟

    本示例中的"Qt自绘控件-旋转的时钟"是一个典型的自定义控件案例,它模拟了一个旋转的时钟显示,这涉及到Qt的图形系统、事件处理以及时间更新机制。 1. **自定义控件的创建** 在Qt中创建自定义控件需要继承自一个...

Global site tag (gtag.js) - Google Analytics