1.「Qt Widget中文示例指南」如何实现一个简单的RHI小部件示例(二)
2.如何用Qt实现Ribbon风格?附源码
「Qt Widget中文示例指南」如何实现一个简单的RHI小部件示例(二)
Qt 是一个强大的跨平台 C++ 开发工具,它提供了一次编写,所有平台无差别运行的能力,以及几乎覆盖所有开发过程中所需工具的完备性。Qt 已在众多行业和企业中得到广泛应用,支持数百万设备和应用。excel文件源码
本文将展示如何使用 QRhi、Qt 的 3D API 和着色语言抽象层渲染一个三角形。这在 QWidget 世界的 RHI 窗口示例中是一个对应示例,QRhiWidget 子类使用基本顶点和片段着色器渲染单个三角形,无需处理低级细节如窗口设置和 QRhi,因为这些由 QWidget 框架负责。QRhiWidget 实例被添加到 QVBoxLayout 中,保持示例紧凑。突然缩量 源码
在上篇文章中,我们介绍了结构和 main() 函数,本文将深入讲解渲染流程。在 examplewidget.cpp 中,小部件通过 Qt 资源系统加载.qsb 文件,使用辅助函数加载 QShader 对象。为了适应模块依赖和 qmake,本示例不采用 CMake 函数 qt_add_shaders(),而是将.qsb 文件作为源代码树的一部分。
initialize() 函数实现包括查询和存储 QRhi 对象以供后续使用,并在存在不匹配时(例如窗口移动时)触发重建图形资源。这个示例没有主动演示窗口间的修复,但已准备好处理调整窗口大小时可能出现的商品网站源码下载小部件大小变化。每次调用时都会被调用的 initialize() 函数确保查询最新的像素大小,无需特殊处理。
在需要创建图形资源时,initialize() 使用基于 QRhi 的典型代码完成工作。单个顶点缓冲区用于存储交错位置和颜色数据,模型视图投影矩阵通过统一缓冲区公开,这是唯一可见给着色器的资源。管道依赖于默认值(如关闭深度测试、禁用混合等)。顶点数据布局为 x, y, r, g, b,步幅为 5 个浮点数,第二个顶点输入属性(颜色)有 2 个浮点数的偏移量。
注意:这个示例依赖 QRhiWidget 的订单支付页面源码默认 autoRenderTarget 设置为 true,因此无需管理渲染目标,通过调用 renderTarget() 查询现有渲染目标。
最后,计算投影矩阵,它取决于小部件的大小,因此在每次调用时都完成。注意:投影矩阵包括 QRhi 的校正矩阵,以适应 3D API 的归一化设备坐标差异。
在渲染过程中,小部件记录单个呈现传递,其中包含单个绘制调用。在初始化步骤中计算的视图投影矩阵与模型矩阵结合,得到的仿图网源码矩阵写入统一缓冲区。记录带有 3 个顶点的绘制调用,绑定图形管道到命令缓冲区,并设置视口覆盖整个小部件。没有索引缓冲区,只有一个顶点缓冲区绑定。
一旦记录了渲染通道,调用 update() 请求新的框架,确保小部件不断更新,并且三角形看起来是旋转的。默认情况下,呈现线程(在此示例中为主线程)受到呈现速率的限制。在这个例子中,没有适当的动画系统,因此旋转将在每一帧中增加,导致三角形以不同的刷新率以不同的速度旋转。
如何用Qt实现Ribbon风格?附源码
为在Qt中实现Ribbon风格进行探索,操作环境为win bit搭配VS更新至5版本和Qt5.6.0 bit。首选组件是Qt的widget和scrollArea。新创建的Qt程序中,将默认菜单栏和工具栏去除,以便为Ribbon风格定制空间。通过添加一个widget和一个scrollArea至UI界面,这两个控件布局采用垂直排列,进一步在widget内部放置了一个pushButton和TabWidget,其排列形式为水平方向。在scrollArea内部,同样采用水平排列方式放置widget。设计布局完成后,整体展现的界面结构符合Ribbon风格预期。
在实现过程中,首先确定界面的布局边界设为0,同时间距设置为0,以优化视觉效果。对所有元素进行样式调整,按钮和TabWidget的文字进行了个性化修改。对scrollArea内部的widget背景颜色设定为白色,并指定一个适合宽度,随后调整scrollArea背景颜色,达到与整体风格一致的效果。
要将左侧的文件菜单置于主界面之上,并确保其他标签向右顺序排列,通过按钮的绝对定位方法能够解决文件菜单的定位问题。然而,对于TabWidget的标签移动问题,借助QSS(CSS扩展)实现更高效的调整。具体代码编写用于执行这一操作。实现后,界面布局的各个元素位置得到精确调整。
为了增强Ribbon风格的直观性,对按钮和Tabbar的样式进行细致设计,使界面更加美观和实用。在文件菜单实现阶段,直接应用QMenu进行菜单创建可能受限,而利用Qt提供的QWidgetAction来创建自定义菜单widget,并结合QSS进行个性化设计,提供了灵活的实现方法。通过编写适用于QWidgetAction的类并重写paintEvent函数,可以顺利应用QSS样式。对文件按钮菜单进行具体配置,以达到理想的功能效果。
接下来,对Tabwidget内的groupBox通过QSS进行定制,以塑造更专业的外观与风格。随着对各个组件的逐步优化,界面呈现的美观与功能并重特点逐步显现。最终的界面设计融入了微软雅黑字体风格,对TabWidget背景色进行设定,并隐藏文件按钮菜单的小按钮,使界面在美观与功能性上达到和谐统一。
通过以上步骤,已实现并展示了基于Qt实现Ribbon风格的完整过程与细节。包括界面布局、组件样式调整、功能性实现及最终美化等环节,旨在提供一种兼具美观与实用性,符合Ribbon风格要求的界面设计方法。