`
qimo601
  • 浏览: 3444134 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

【转】QT中窗口刷新事件的学习总结

    博客分类:
  • Qt
阅读更多

 

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

1QWidget * QScrollView::viewport () const

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

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

4void QWidget::update () []

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

6bool updatesEnabled

 

二.现分别详细介绍:

 

1QWidget * QScrollView::viewport () const

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

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

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

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

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

 

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

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

 

4void QWidget::update () []

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

 

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

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

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

子窗口部件不被影响。

 

6bool updatesEnabled

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

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

实例:

    setUpdatesEnabled( FALSE );

    bigVisualChanges();

    setUpdatesEnabled( TRUE );

    repaint();

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

 

转:http://wenjiewendi.blog.163.com/blog/static/2127586620063104216220/?fromdm&isFromSearchEngine=yes

分享到:
评论

相关推荐

    Qt 子窗口父窗口切换,窗口间传值

    首先,让我们了解Qt窗口系统的基础。在Qt中,QMainWindow通常作为主窗口,可以包含多个子窗口或对话框,如QDialog、QWidget或QStackedWidget等。这些子窗口可以通过继承自QWidget的类来创建,并通过调用show()方法...

    Qt自定义旋转刷新按钮

    【Qt自定义旋转刷新按钮】项目是一个利用Qt框架创建的用户界面组件,它提供了一个具有旋转刷新效果的按钮。在Qt开发中,自定义控件是实现特定功能或视觉效果的重要手段,本项目就是这样的一个实例。以下是这个项目中...

    Qt无边框窗口最大化时拖拽还原代码

    在Qt编程中,有时我们可能需要创建一个没有系统默认边框和标题栏的窗口,以实现自定义的界面效果。然而,这样的无边框窗口在最大化后,通常无法通过常规方式拖动来还原窗口大小。本篇文章将详细介绍如何通过重定义`...

    QT分辨率修改事件.7z

    在Qt中,窗口大小的变化通常由`QResizeEvent`类表示,这是Qt事件模型的一部分。当窗口大小发生变化时,系统会发送一个`QResizeEvent`到窗口系统,然后由窗口系统转发给对应的窗口对象。开发者可以通过重写`QWidget`...

    如何用qt制作父子窗口界面(附完整源代码)

    如何用qt creator制作父子窗口界面(附完整源代码)

    QT数据实时刷新显示-数据分析基于DLT645协议

    QT数据实时刷新显示与数据分析基于DLT645协议是一个重要的技术主题,尤其在智能电网、能源管理系统等领域中广泛应用。QT(Qt)是一个跨平台的C++图形用户界面应用程序开发框架,而DLT645协议则是一种电力线通信协议...

    Qt5窗口显示D3D11的程序示例

    - 为了每帧都更新显示,你需要在`D3D11Widget`中实现一个定时器事件或利用Qt的`QTimer`,并在事件处理函数中调用`swapBuffers`方法,以交换前后帧缓冲区,实现屏幕内容的刷新。 **资源管理** - 在D3D11中,资源如...

    Qt编写多窗口程序实例

    在本文中,我们将深入探讨如何使用Qt框架来创建多窗口应用程序。Qt是一个强大的跨平台开发工具,支持多种操作系统,如Windows、Linux、macOS等。它提供了丰富的库和API,使得开发者可以方便地构建功能丰富的图形用户...

    QT自定义QTextEdit实现大数据的实时刷新显示源码

    在QT编程中,QTextEdit是一个常用的控件,用于显示和编辑多行文本。它提供了丰富的文本格式化功能,包括字体、大小、颜色等。在处理大数据实时刷新显示时,QTextEdit的标准实现可能无法满足需求,因为标准QTextEdit...

    使用Qt实现网页自动刷新工具 示例demo

    使用Qt实现网页自动刷新工具 示例demo 代码 使用Qt调用windows api 实现网页窗口刷新 https://blog.csdn.net/qq_29542611/article/details/83352799

    qt聊天窗口类imessage源代码

    此外,QT的信号和槽机制是事件驱动编程的核心,IMessage类可能会有信号来通知其他部分有新消息到来,例如`void newMessageReceived()`,而聊天窗口的视图部分则通过连接这个信号来实时更新界面。 标签提到的...

    QT分别获取当前所有屏幕的分辨率和刷新率(支持多屏)

    在本文中,我们将深入探讨如何使用QT框架来获取系统中所有屏幕的分辨率和刷新率,特别是在多屏显示环境中。QT是一个强大的跨平台应用程序开发框架,它提供了丰富的图形用户界面(GUI)工具和功能,包括对多显示器的...

    Qt Opengl学习绝好资料

    标题“Qt Opengl学习绝好资料”说明这是一份优秀的学习资源,它旨在指导读者如何在Qt环境中使用OpenGL进行图形绘制。标题中提到的“学习”和“资料”暗示了本资源的教育性质,它更侧重于入门和基础知识的传递。描述...

    MFC程序调用Qt界面

    - 可以创建一个简单的Qt应用程序作为示例,并在其中定义一个主窗口。例如: ```cpp extern "C" __declspec(dllexport) int main(int argc, char* argv[]) { QApplication a(argc, argv); MyTest w; w.show(); ...

    Qt+update函数+paintEvent事件

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

    Qt实现的浮动工具箱

    在Qt中,我们可以使用`QMainWindow`或者`QWidget`来创建浮动窗口。通常,通过设置窗口的属性`windowFlags`,如`Qt::Window`,可以使窗口脱离父窗口,成为浮动窗口。此外,添加`Qt::WA_TranslucentBackground`标志...

    Qt单个滚动条控制多窗口 demo.rar

    在Qt编程环境中,有时我们需要实现一个功能,即通过一个单一的滚动条来控制多个窗口或视图的显示。这样的设计可以有效地节省界面空间并提供统一的用户交互体验。本示例"Qt单个滚动条控制多窗口 demo"就展示了如何...

    qt 编程学习总结从初学到精通更加深入的学习QT

    QT编程学习是一个逐步深入的过程,从初学者到精通者,需要掌握多个关键概念和技术。以下是一些关于QT编程的关键知识点: 1. **QlistView与数据模型关联**: 在QT中,`QlistView`控件是通过数据模型(`...

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

    Qt的绘图事件是GUI编程中的重要组成部分,用于在窗口或控件上进行自定义绘图。当一个控件需要更新其显示内容时,Qt会发送一个`paintEvent`信号。在这个事件处理函数中,我们可以调用`QPainter`类来进行图形绘制。...

    第一个qt窗口程序

    适合初学者 1.从登陆窗口到主窗口 2.动态刷新显示时间 3.菜单栏添加图标及响应事件 4.登陆窗口两个lineedit 聚焦 5.演示状态栏使用 代码本来简单, 还有关键代码注释,所以不附上文档了。

Global site tag (gtag.js) - Google Analytics