一.主要理解一下几个方法和属性:
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()来获得属性值。
转:http://wenjiewendi.blog.163.com/blog/static/2127586620063104216220/?fromdm&isFromSearchEngine=yes
分享到:
相关推荐
首先,让我们了解Qt窗口系统的基础。在Qt中,QMainWindow通常作为主窗口,可以包含多个子窗口或对话框,如QDialog、QWidget或QStackedWidget等。这些子窗口可以通过继承自QWidget的类来创建,并通过调用show()方法...
【Qt自定义旋转刷新按钮】项目是一个利用Qt框架创建的用户界面组件,它提供了一个具有旋转刷新效果的按钮。在Qt开发中,自定义控件是实现特定功能或视觉效果的重要手段,本项目就是这样的一个实例。以下是这个项目中...
在Qt编程中,有时我们可能需要创建一个没有系统默认边框和标题栏的窗口,以实现自定义的界面效果。然而,这样的无边框窗口在最大化后,通常无法通过常规方式拖动来还原窗口大小。本篇文章将详细介绍如何通过重定义`...
在Qt中,窗口大小的变化通常由`QResizeEvent`类表示,这是Qt事件模型的一部分。当窗口大小发生变化时,系统会发送一个`QResizeEvent`到窗口系统,然后由窗口系统转发给对应的窗口对象。开发者可以通过重写`QWidget`...
如何用qt creator制作父子窗口界面(附完整源代码)
QT数据实时刷新显示与数据分析基于DLT645协议是一个重要的技术主题,尤其在智能电网、能源管理系统等领域中广泛应用。QT(Qt)是一个跨平台的C++图形用户界面应用程序开发框架,而DLT645协议则是一种电力线通信协议...
- 为了每帧都更新显示,你需要在`D3D11Widget`中实现一个定时器事件或利用Qt的`QTimer`,并在事件处理函数中调用`swapBuffers`方法,以交换前后帧缓冲区,实现屏幕内容的刷新。 **资源管理** - 在D3D11中,资源如...
在本文中,我们将深入探讨如何使用Qt框架来创建多窗口应用程序。Qt是一个强大的跨平台开发工具,支持多种操作系统,如Windows、Linux、macOS等。它提供了丰富的库和API,使得开发者可以方便地构建功能丰富的图形用户...
在QT编程中,QTextEdit是一个常用的控件,用于显示和编辑多行文本。它提供了丰富的文本格式化功能,包括字体、大小、颜色等。在处理大数据实时刷新显示时,QTextEdit的标准实现可能无法满足需求,因为标准QTextEdit...
使用Qt实现网页自动刷新工具 示例demo 代码 使用Qt调用windows api 实现网页窗口刷新 https://blog.csdn.net/qq_29542611/article/details/83352799
总结来说,这个例子展示了如何利用Qt的多线程功能和信号槽机制实现在次线程中获取系统时间,并在主线程的界面上实时显示。这有助于提高程序的响应速度,确保用户界面始终保持流畅,同时进行后台的处理任务。在实际...
此外,QT的信号和槽机制是事件驱动编程的核心,IMessage类可能会有信号来通知其他部分有新消息到来,例如`void newMessageReceived()`,而聊天窗口的视图部分则通过连接这个信号来实时更新界面。 标签提到的...
标题“Qt Opengl学习绝好资料”说明这是一份优秀的学习资源,它旨在指导读者如何在Qt环境中使用OpenGL进行图形绘制。标题中提到的“学习”和“资料”暗示了本资源的教育性质,它更侧重于入门和基础知识的传递。描述...
在本文中,我们将深入探讨如何使用QT框架来获取系统中所有屏幕的分辨率和刷新率,特别是在多屏显示环境中。QT是一个强大的跨平台应用程序开发框架,它提供了丰富的图形用户界面(GUI)工具和功能,包括对多显示器的...
- 可以创建一个简单的Qt应用程序作为示例,并在其中定义一个主窗口。例如: ```cpp extern "C" __declspec(dllexport) int main(int argc, char* argv[]) { QApplication a(argc, argv); MyTest w; w.show(); ...
在Qt框架中,`update()`函数和`paintEvent()`事件是进行界面绘制和更新的核心机制。本文将深入探讨这两个概念,以及它们如何协同工作来实现动态用户界面。 首先,我们来理解`update()`函数。在Qt中,所有的窗口部件...
在Qt中,我们可以使用`QMainWindow`或者`QWidget`来创建浮动窗口。通常,通过设置窗口的属性`windowFlags`,如`Qt::Window`,可以使窗口脱离父窗口,成为浮动窗口。此外,添加`Qt::WA_TranslucentBackground`标志...
在Qt编程环境中,有时我们需要实现一个功能,即通过一个单一的滚动条来控制多个窗口或视图的显示。这样的设计可以有效地节省界面空间并提供统一的用户交互体验。本示例"Qt单个滚动条控制多窗口 demo"就展示了如何...
3. **与Halcon交互**:在QT线程安全地调用Halcon的API,获取或更新3D对象的状态,然后在`paintGL`中刷新显示。 4. **事件处理**:可能需要处理鼠标和键盘事件,以便在QT界面上与Halcon的3D对象进行交互,如旋转、平...
QT编程学习是一个逐步深入的过程,从初学者到精通者,需要掌握多个关键概念和技术。以下是一些关于QT编程的关键知识点: 1. **QlistView与数据模型关联**: 在QT中,`QlistView`控件是通过数据模型(`...