C++界面开发框架Qt入门指南 - Qt Widget样式感知小部件(五)

样式(继承QStyle的类)代表小部件绘制并封装 GUI 的外观。 QStyle 类是一个抽象基类,它封装了 GUI 的外观。 Qt 的内置小部件使用它来执行几乎所有的绘图,确保它们看起来与等效的原生小部件完全一样。

Qt带有一系列内置样式,某些样式仅在特定平台上可用。自定义样式可作为插件使用,或者通过使用 QStyleFactory::create()创建特定样式类的实例并使用QApplication::setStyle()设置它。

Qt技术交流群:166830288      欢迎一起进群讨论

点击获取Qt组件下载

QStyle 函数

QStyle类定义了三个用于绘制图元、控件和复杂元素的函数: drawPrimitive(), drawControl()和drawComplexControl(),这些函数采用以下参数:

  • 要绘制的元素的枚举值。
  • 一个QStyleOption ,其中包含绘制元素所需的信息。
  • 用于绘制元素的QPainter。
  • 指向QWidget的指针,通常是绘制元素的小部件。

并非所有小部件都向自己发送指针,如果发送给函数的样式选项不包含您需要的信息,应该检查小部件实现来查看是否发送指向自身的指针。

QStyle 类还提供了绘制元素时使用的辅助函数。drawItemText()函数在指定的矩形内绘制文本,将QPalette作为参数;drawItemPixmap()函数有助于在指定的边界矩形内对齐像素图。

其他 QStyle 函数对绘图的函数进行各种计算,如果小部件自己绘制多个样式元素,它们也使用这些函数来计算大小提示和边界矩形。 与绘制元素的函数一样,辅助函数通常采用相同的参数。

  • subElementRect()  函数采用SubElement枚举值并计算子元素的边界矩形,样式使用这个函数来知道在哪里绘制元素的不同部分。 这主要是为了重用; 如果创建新样式,则可以使用与超类相同的子元素位置。
  • subControlRect()函数用于计算复杂控件中子控件的边界矩形。 实现新样式时,您重新实现 subControlRect() 并计算与超类不同的矩形。
  • pixelMetric() 函数返回一个像素度量,它是以屏幕像素为单位给出的与样式相关的大小,它采用 PixelMetric 枚举的值并返回正确的测量值。请注意,像素度量不一定必须是静态测量,但可以使用例如样式选项进行计算。
  • hitTestComplexControl() 函数返回鼠标指针在复杂控件上的子控件。 通常,这只是简单地使用subControlRect()来获取子控件的边界矩形,然后查看哪个矩形包含光标的位置。

QStyle 也有函数polish() 和unpolish(),所有小部件在显示之前被发送到 Polish() 函数,在它们被隐藏时被发送到 unpolish()。您可以使用这些函数来设置小部件的属性或执行您的样式所需的其他工作,例如,如果您需要知道鼠标何时悬停在小部件上,则需要设置WA_Hover 小部件属性,State_MouseOver 状态标志将在小部件的样式选项中设置。

QStyle 有一些静态辅助函数,可以完成一些常见和困难的任务。 他们可以根据滑块的值计算滑块句柄的位置,并在考虑反向布局的情况下变换矩形并绘制文本。

重新实现 QStyle 虚函数的常用方法是对不同于超类的元素进行处理; 对于所有其他元素,您可以简单地使用超类实现。

Qt组件推荐

  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanNavigation:QtitanNavigationDesignUI 组件是一组 GUI 控件,它实现了菜单、导航框、命令栏等导航界面,并让您以更少的滚动和点击次数有效地查看所有实体(工作区、网格或其他项目)。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

你可能感兴趣的:(c++,qt,Qt,Widget,C++图形界面开发,嵌入式开发)