例如,当我在QLabel上使用setText()时,Qt会自动为我更新视图/ GUI,并显示新文本,但是幕后发生了什么?使用诸如setText()之类的功能时,是否有更新功能会自动被调用?
谢谢!
答案 0 :(得分:2)
您应该查看此link中的基本文档。
内部系统稍微复杂一些,但通常遵循观察者模式。此机制允许检测用户操作或更改状态,并对此操作做出响应。
低级交互(例如刷新屏幕)是通过Event System
实现的在Qt中,事件是从抽象QEvent类派生的对象,它们表示发生在应用程序内部或由于应用程序需要了解的外部活动而发生的事情。事件可以由QObject子类的任何实例接收和处理,但它们与小部件尤其相关。本文档介绍了事件在典型应用程序中的传递和处理方式。
因此,关于显示过程,有一个专门的事件。 QWidget对象处理/订阅PaintEvent,请参见QWidget::paintEvent
。
可以在子类中重新实现此事件处理程序,以接收事件中传递的绘画事件。绘制事件是重新绘制小部件的全部或一部分的请求。
调用QLineEdit::setText()
时,将根据操作系统配置,刷新率等,在下次触发显示事件时重新绘制窗口小部件。
对于高级交互,Qt使用基于signal/slot机制的类似模式:
观察者模式在GUI应用程序中无处不在,并经常导致一些样板代码。 Qt的创建是为了删除此样板代码并提供一种简洁的语法,而信号和时隙机制就是答案。