1.如何用Qt实现Ribbon风格?附源码
2.Qwt开发笔记(二):Qwt基础框架介绍、折线图介绍、折线图Demo以及代码详解
3.「Qt Widget中文示例指南」如何实现一个简单的RHI小部件示例(二)
4.PyQt5系列教程(53):欢乐斗地主QMdiArea的使用
如何用Qt实现Ribbon风格?附源码
为在Qt中实现Ribbon风格进行探索,操作环境为win bit搭配VS更新至5版本和Qt5.6.0 bit。首选组件是Qt的widget和scrollArea。新创建的coolrar 源码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风格的完整过程与细节。包括界面布局、组件样式调整、功能性实现及最终美化等环节,midi播放源码钢琴旨在提供一种兼具美观与实用性,符合Ribbon风格要求的界面设计方法。
Qwt开发笔记(二):Qwt基础框架介绍、折线图介绍、折线图Demo以及代码详解
QWT开发笔记系列整理集合,广泛使用并深入理解Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),本文旨在系统解说Qwt基础框架、折线图、折线图Demo以及代码详解。
QwtPlot,用于绘制二维图形的小部件,支持无限数量的绘图项目,如曲线(QwtPlotCurve)、标记(QwtPlotMarker)、网格(QwtPrintGrid)等。
QwtPlot的常用成员函数包括:自动刷新(autoReplot)、自动缩放(axisAutoScale)、轴的刻度标签字体(axisFont)、轴当前间隔(axisInterval)等。
QwtPlot的枚举成员,如图例位置(LegendPosition)等,描述图表中启用的动画。
QwtPlot的成员函数如:轴的步长(axisStepSize)、轴标题(axisTitle)、页脚文本(footer)等,提供了丰富的配置选项。
QwtPlotGrid,绘制坐标网格的lua选择角色源码类,提供如主要网格线、次要网格线的启用、主要网格线笔(majorPen)和次要网格线笔(minorPen)等属性的配置。
QwtLegend,图例小部件,用于展示图例项,可设置只显示、显示可选择、显示可点击等。
QwtSymbol,用于绘制符号的类,常用于实际数据点的显示。
QwtPlotCurve,表示一系列点的绘图项,支持不同显示样式、插值(如样条曲线)和符号的配置。
在具体使用中,通过setPen设置曲线的画笔、setStyle设置点样式、setSymbol设置符号等,实现灵活的数据点展示。
将曲线附加到绘图中,通过setTitle设置曲线名称,setPen设置曲线的画笔、宽度、线型等,setXAxis和setYAxis关联X轴和Y轴,setRenderHint设置曲线渲染模式,setSamples设置曲线数据等操作,实现折线图的ip授权站源码构建和显示。
在Demo源码中,如LineChartWidget.h和LineChartWidget.cpp,提供了折线图的完整实现,包括曲线的创建、数据的设置、曲线与绘图的关联等。
通过这些操作,可以深入理解Qwt基础框架、折线图的实现与应用,实现复杂的数据可视化需求。
「Qt Widget中文示例指南」如何实现一个简单的RHI小部件示例(二)
Qt 是一个强大的跨平台 C++ 开发工具,它提供了一次编写,所有平台无差别运行的能力,以及几乎覆盖所有开发过程中所需工具的完备性。Qt 已在众多行业和企业中得到广泛应用,支持数百万设备和应用。
本文将展示如何使用 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() 请求新的框架,确保小部件不断更新,并且三角形看起来是旋转的。默认情况下,呈现线程(在此示例中为主线程)受到呈现速率的限制。在这个例子中,没有适当的动画系统,因此旋转将在每一帧中增加,导致三角形以不同的刷新率以不同的速度旋转。
PyQt5系列教程():欢乐斗地主QMdiArea的使用
上期文章中,我们一起探讨了QTabWidget、QStackedWidget和QDockWidget的运用,通过这些工具,我们能够实现在一个窗口内集成更多的组件。本期,我们转向学习QMdiArea,一个强大的工具,它提供了一个展示MDI窗口的区域,类似于Windows在一个屏幕上同时维护多个应用程序窗口,也适用于在一个显示区域内管理多个文件窗口。
QMdiArea的功能类似于MDI窗口的窗口管理器。它绘制并管理它所包含的窗口,提供级联或平铺布局,通常作为QMainWindow的中心部件用于创建MDI应用,但也可以放置在任何布局中。通过将区域添加到主窗口,代码如下所示:
添加QMdiArea到主窗口的代码片段。
每个子窗口都是QMdiSubWindow实例,通过addSubWindow()函数添加到MDI区域。通常会传递QWidget作为内部窗口部件,或直接传递QMdiSubWindow。子窗口继承QWidget,支持与正常顶层窗口相同的API编程。
子窗口在获取键盘焦点或调用setFocus()时变为活动状态。用户通过常规方式移动焦点来激活窗口。MDI区域在活动窗口改变时发出subWindowActivated()信号,而activeSubWindow()函数返回当前活动子窗口。
subWindowList()函数返回所有子窗口的列表,可用于创建包含窗口列表的弹出式菜单。
子窗口按照当前窗口排序,用于subWindowList()、activateNextSubWindow()和activatePreviousSubWindow()。在使用cascadeSubWindows()和tileSubWindows()进行窗口级联或平铺时,此排序规则同样重要。
QMdiArea提供内置的布局策略cascadeSubWindows()和tileSubWindows()。这些功能轻松集成到菜单条目中,用于管理窗口布局。
详细信息请参考官方文档。
本期实验通过模拟发放扑克牌,具体步骤包括发1张牌、随机发放5张牌和收牌清空操作。我们通过自定义QLabel类,赋予每个对象随机的扑克牌素材,将每一个QLabel视为一个QWidget,借助QMdiArea的相关函数实现这一过程。
使用QMdiArea的一部分代码展示。代码量并不繁重。
为了在工具栏上实现不同功能的按钮,可以参考相关知识点。若希望在工具栏按钮上显示文字,需添加特定代码。
新建QMdiArea对象,设置为主窗口的中心部件。cardlist为包含扑克牌文件名的列表。发1张牌,从cardlist随机选取一个元素即可。随机发放5张牌,从cardlist中选取包含5个元素的随机子列表。
发1张牌的代码示例。随机获取扑克牌文件名。
QMdiSubWindow是QMdiArea提供的子窗口类,代表MDI区域中的顶级窗口,包含窗口标题栏、内部窗口部件等,视样式可能还包括窗口框架和尺寸夹点。
构建QMdiSubWindow最常用方法是使用内部窗口部件调用QMdiArea.addSubWindow()。也可以自行创建子窗口,通过setWidget()设置内部窗口部件。
与常规顶级窗口编程类似,您可以使用相同的API,如show()、hide()、showMaximized()和setWindowTitle()等函数。
在代码中,通过setWidget()将自定义的QLabel类Card作为内部窗口部件,并通过addSubWindow()添加子窗口。
子窗口通常有最小化、最大化和关闭按钮。显示的扑克牌通过设置setWindowFlags(Qt.WindowMinimizeButtonHint)来仅显示最小化按钮。同时调整窗口大小并显示。
发5张牌的函数与上述功能类似,不再赘述。
通过这个函数可以快速关闭所有子窗口。
收牌的函数实质上是对子窗口进行排列,以级联模式排列所有子窗口。
平铺模式排列所有子窗口的方法是QMdiArea.tileSubWindows(),有兴趣的读者可以尝试。
本次学习内容较为基础,详细实现请下载源代码自行探索。
文章至此,希望大家喜欢本篇文章。如果你觉得有帮助,请给我点赞、赞赏或分享给好友。关注微信公众号:学点编程吧,发送“pyqt”获取本期代码。加油!(ง •̀_•́)ง (*•̀ㅂ•́)