使用QProxyStyle定制QMenu (一)

定制QWidget的样式的方式

  • 使用Qt Style Sheets(qss)实现定制
  • 继承QStyle实现定制

Qt Style Sheets的方式请参考我翻译的两篇文章:

  • Qt Style Sheets–简介
  • Qt-Style-Sheets-语法

后面的几篇文章我将会介绍如何使用继承QStyle的方式定制QMenu,先放出一个成果图:

使用QProxyStyle定制QMenu (一)_第1张图片

开始定制你的widgets

如果你准备发开自定义样式的widgets并准备让它们在所有平台上看起来都一样,那么你可以使用QStyle的一些函数分别实现widget的部分绘制过程,这些函数就包括:

  • drawItemText()
  • drawItemPixmap()
  • drawPrimitive()
  • drawControl()
  • drawComplexControl()

大部分的QStyle绘制函数(上面那几个)会使用到以下的几个参数:

  • 一个指明哪个图形元素将被绘制的枚举值
  • 一个QStyleOption用于指明该图形元素应该如何以及在哪里渲染
  • 一个用于绘制该元素的QPainter
  • 一个将被绘制的QWidget(这是可选的)

创建定制的style

这里有两种方式创建定制的style:

  • 静态的方式:

1.选择一个已有的QStyle类并继承它,实现某些定制行为的函数
2.从头实现QStyle的所有函数(当然这个是比较累人的,一般你也不用从头到尾写)

  • 动态的方式:

官方文档说,去看QProxyStyle的说明,我没看到哪里有说什么动态方式,所以我就没有搞明白到底动态是怎么个动态法

所有后面一堆要说到的都是静态方式的(不知道什么区别,反正文档就说这是静态方式的,那就这样叫着吧)。最通常作为基类用的就是QCommonStyle(并不是QStyle)这是因为Qt需要它的styles就是QCommonStyle。
事实上QCommonStyle是继承于QStyle的,而QProxyStyle则是继承于QCommonStyle的,所以我们将要用到QProxyStyle来实现我们的样式定制。

好了,上面列的这些就是你实现自定义widget重点要弄清楚的东西,具体的解释后面使用的时候详细体会吧,我就不像文档一点点都写这里了。需要的请直接参考QStyle的说明文档。

你可能感兴趣的:(Qt,Widgets,-Widgets,Qt,Widgets,-Styles)