`
tomhibolu
  • 浏览: 1431246 次
文章分类
社区版块
存档分类
最新评论

QWidget 之paint部分杂记

 
阅读更多

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了,...

参考


分享到:
评论

相关推荐

    QWidget嵌入到QML中

    在Qt框架下,`QWidget`和`QML`是两种不同的UI表示技术。`QWidget`是C++中的组件,主要用于构建传统的图形用户界面,而`QML`是一种声明式语言,用于创建现代、动态和触控友好的用户界面。将`QWidget`嵌入到`QML`中...

    使用QWidget实现翻转

    `QPropertyAnimation`是Qt动画框架的一部分,用于基于对象属性的动画。它允许我们对一个对象的特定属性(如旋转角度)进行平滑的动画控制。在这个例子中,我们将创建一个`QPropertyAnimation`实例,动画的目标属性是...

    给QWidget加滚动条

    在Qt编程环境中,`QWidget`是基础的用户界面元素,用于构建复杂的图形用户界面。有时候,当`QWidget`内部的内容过大无法一次性显示时,我们可能需要为其添加滚动条以实现内容的平滑滚动。本教程将详细介绍如何为`...

    qwidget嵌入qml最完整代码

    在Qt框架中,QML(Qt Meta Language)和QWidget是两种不同的UI表示方式。QML是一种基于JSON的声明式语言,用于构建具有丰富图形界面的应用程序,而QWidget是C++中的一个类,它是Qt GUI编程的核心组件。在某些场景下...

    QML与QWidget交互

    QML是Qt Quick的一部分,它提供了一种声明式语言来创建富媒体和动态的图形用户界面,而QWidget是Qt传统C++ API中的组件系统,用于创建桌面应用的窗口和控件。尽管它们有不同的设计哲学和编程模型,但在实际应用中,...

    2个QWidget相互切换显示.zip

    在QT编程中,`QWidget` 是一个非常基础且重要的组件,它是所有用户界面(UI)元素的基类。本示例“2个QWidget相互切换显示.zip”提供了如何在QT应用程序中实现两个`QWidget`对象之间的动态切换,同时保持每个`...

    qwidget与qml交互

    在Qt开发中,QML(Qt Meta Language)和QWidget是两种不同的UI表示方式。QML是一种基于JSON的声明式语言,用于构建具有丰富图形界面的应用程序,而QWidget是C++中的一个类,它是Qt GUI系统的基础,用于创建窗口和...

    QWidget控件在QML中使用 控件

    然而,有时我们可能需要在QML中使用C++实现的复杂功能,这时就可以引入QWidget控件。本文将深入探讨如何在QML中使用QWidget控件,并通过`QmlWidget.cpp`和`QmlWidget.h`这两个文件来展示具体的实现细节。 首先,让...

    QWidget,QMainWindow和QDialog的区别

    相比之下,QMainWindow 是 QMainWindow 类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一...

    两个QWidget互相交换显示

    QWidget对象可以独立显示,也可以作为其他复杂组件(如QLayout或QStackedWidget)的一部分。它们有自己的绘图区域,并可以通过`paintEvent()`函数自定义绘制内容。同时,QWidget还具备了`show()`, `hide()`, `raise_...

    QWidget嵌入Qml界面.zip

    1. **创建QWidget子类**:首先,你需要创建一个继承自`QWidget`的自定义类,这个类将作为`QML`界面的一部分。 2. **Q_OBJECT宏**:在`QWidget`子类中包含`Q_OBJECT`宏,以支持信号和槽机制,这是`Qt`中进行事件处理...

    QWidget无标题窗口,可随意缩放拖动

    `QWidget`是所有Qt界面对象的基类,它可以是一个简单的窗口,也可以是复杂用户界面的一部分,如按钮、文本框等。在创建自定义无标题窗口时,我们通常会继承`QWidget`并覆盖其行为以满足特定需求。 标题栏通常是窗口...

    QWidget样式表设置背景示例代码

    在Qt编程中,`QWidget`是所有用户界面元素的基础类,它提供了基本的窗口功能,如绘制、事件处理等。然而,在尝试通过样式表(QSS,Qt Style Sheets)来改变`QWidget`及其子类的外观时,有时会遇到一些问题,特别是当...

    Qt例程源代码QWidget.7z

    这个"Qt例程源代码QWidget.7z"压缩包显然是一个包含Qt编程示例的资源,特别是关于QWidget类的使用。QWidget是Qt GUI库中的基础组件,它是所有用户界面对象的基类,包括按钮、文本框、菜单等。 在Qt中,QWidget主要...

    QT C++ QWidget 自定义头窗口头标+毛玻璃效果

    在QT C++编程环境中,`QWidget`是所有用户界面组件的基础类,它是构建GUI应用程序的核心。本教程将探讨如何利用`QWidget`自定义一个带有独特头部设计和毛玻璃效果的窗口。毛玻璃效果,又称模糊效果,能为窗口提供半...

    Lottie-QWidget

    将Lottie-web用QML封装了一层,将Qt的signal与Lottie的事件(播放、暂停...)对接起来,Lottie-web支持QML,不支持Qwidget,所以想QWidget使用就需要QWidget嵌套QML来调用Lottie库,可以实现显示josn动画效果。

    QWidget 显示图片,支持缩放、拖动、右键菜单等功能

    在Qt框架中,`QWidget` 是一个基础的用户界面组件,可以用来构建各种复杂的图形用户界面。本示例中,我们关注的是一个扩展了`QWidget` 的类,它增加了显示图片、支持缩放、拖动以及右键菜单的功能。这个自定义的组件...

    qwidgets_qwidget和qwidgets_qtqwidget_

    QWidget是所有用户界面对象的基类,而QtQWidget则是Qt库中的一个关键部分,它封装了与Windows系统底层交互的细节。本文将深入探讨QWidgets和QtQWidget在QT框架中的作用、实现方法以及相关的编程知识点。 首先,...

    026 QWidget类分析显示和隐藏接口说明线程类QThread使用方法.7z

    在Qt库中,`QWidget`类是所有用户界面对象的基础,它是构建图形用户界面(GUI)的核心组件。这个压缩包文件“026 QWidget类分析显示和隐藏接口说明线程类QThread使用方法”显然是针对Qt开发者的,旨在详细解释`...

    2个QWidget相互切换显示.rar

    在QT编程中,QWidget是构建用户界面(UI)的基础组件,它可以被用来创建窗口、对话框和其他用户交互的元素。本示例中的“2个QWidget相互切换显示”着重于如何在同一个应用程序中动态地切换两个独立的QWidget实例,...

Global site tag (gtag.js) - Google Analytics