在Qt 4.4中,Alien Widget诞生了(Window负责与窗口系统的联系。Alien被号称是所有闪烁的终结者)
Qt 4.0 |
automatically double-buffers |
Qt 4.1 |
QWidget::autoFillBackground |
Qt 4.2 |
delayed widget creation (DWC) |
stylesheet |
|
Qt 4.3 |
QWidget::render |
Qt 4.4 |
Alien Widget |
Qt 4.5 |
Translucent Windows |
Qt 4.6 |
widget's graphics effect |
Qt 4.8 |
lighthouse (qpa) |
Qt4.0
- 在Qt 4.0中,启用双缓冲,不必在paintEvent()中编写双缓冲代码来避免闪烁。
Qt4.1
- 在Qt 4.1中,通过启用背景自动传递(propagation),widget不再有任何默认的背景。引入backingstore这个东西。
Qt4.2
- 在Qt 4.2中,延时控件创建(delayed widget creation)的引入,使得widget可以在没有真实窗口句柄的情况下被创建。
QWindowSurface 与 QWidgetBackingStore
Even though QWidget is a QPaintDevice subclass, one will never render directly into a QWidget’s surface. Instead, during the paintEvent, the painting is redirected to an offscreen surface which is represented by the internal class QWindowSurface.
QWidgetBackingStore is responsible for figuring out which parts of the window surface needs to be updated prior to showing it to screen, so its really a repaint manager.
When the concept of backingstore was introduced in Qt 4.1, the two classes were the same, but the introduction of more varying ways to get content to screen made us split it in two.
Qt4.4
-
在Qt 4.4中,Alien Widget诞生了,这样一来,Window和Widget尽管仍是同一个类,却是不同的东西。Window负责与窗口系统的联系。Alien被号称是所有闪烁的终结者,见Qt Invaded By Aliens — The End of All Flicker。
Qt::WA_NativeWindow |
创建原生窗体,即带句柄 |
Qt::WA_PaintOnScreen |
强制创建原生窗体 |
Qt::Window |
顶级窗口,必须是原生窗体 (?) |
QGLWidget |
必须是原生窗体 |
如果一个widget已经是alien Widget,如果对其设置上述标志,或者对其调用winId()函数,都会导致其重新创建为一个native widget。
Qt4.5
-
在Qt 4.5中,graphics system的概念被引入(比如选项有:raster|opengl|x11|native 等)。引人了一个Qt::WA_TranslucentBackground 属性,这个东西和QWidget::setWindowOpacity()有些比较容易混哈。
QWidget::setWindowOpacity()函数,设置窗体(即:isWindow()为真的widget)的整体不透明度, 从0.0到1.0之间, 值越大越不透明。
Qt::WA_TranslucentBackground,这个属性每个QWidget都可以单独设置。不被绘制的区域(背景)都是透明的,绘制的区域的透明程度通过颜色或图片的Alpha Channel值来控制。
Qt4.6
- 在Qt 4.6中,graphics effect被引入。但是,现在,已经不建议使用:
Graphics Effects
State: Deprecated
Reasoning: flawed design, we don’t recommend taking maintainership of this code.
QGraphicsEffect 的子类需要重新实现draw()函数。
以安装了QGraphicsOpacityEffect了QWidget为例,当每次需要重绘时,QWidgetPrivate::drawWidget()不是发送QPaintEvent事件,以调用我们的paintEvent()函数;而是调用QGraphicsOpacityEffect的draw()函数,该函数内,通过QWidget::render()调用paintEvent()将内容绘制在一个QPixmap中,而后设置QPainter的不透明度,绘制QPixmap到目标。
Qt4.8
- 在Qt 4.8中,正式引入lighthouse了,...
参考
-
http://labs.qt.nokia.com/2009/12/16/qt-graphics-and-performance-an-overview/
-
http://labs.qt.nokia.com/2008/02/04/qt-44-and-painting-performance/
-
http://labs.qt.nokia.com/2008/05/12/qwidget-vs-graphics-view-ding-ding-ding
-
http://labs.qt.nokia.com/2007/08/09/qt-invaded-by-aliens-the-end-of-all-flicker/
https://blog.csdn.net/dbzhang800/article/details/6835722
相关文章
- QT开发:QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection'...
- Qt on Android:将Qt调试信息输出到logcat中
- Qt Q_OBJECT qss
- STM32MP157开发板Linux+Qt项目实战:智能猫眼
- 【QT】Qt使用QJson生成json文件并保存
- Qt Designer 修改窗体大小改变控件位置
- 基于QT(C++)+Sqlite3实现单词消除游戏系统【100010741】
- 基于QT(C++)实现(图形界面)旅行模拟查询系统【100010631】
- Qt视频监控系统一个诡异问题的解决思路(做梦都想不到)
- Qt安卓开发经验021-030
- Qt编写安防视频监控系统51-功能激活
- Qt编写安防视频监控系统44-视频上传
- Qt编写安防视频监控系统41-秘钥认证
- Qt编写的项目作品7-视频监控系统
- Qt编写自定义控件25-自定义QCustomPlot
- Qt编写安防视频监控系统7-全屏切换
- Qt编写安防视频监控系统2-视频播放
- Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)
- Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)
- 解析Qt元对象系统(四) 属性系统(确实比较方便)
- Qt之QDateEdit和QTimeEdit
- Qt之pro配置详解
- Qt ------ CSS 长度单位
- Qt笔记——元对象系统
- qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
- Qt Quick 和qml介绍
- Qt 维护工具MaintenanceTool.exe 使用
- VS导入QT项目出现编译错误 rcc (I:XXXXXbinrcc.exe)
- Qt 解析Json