怎么制作原文链接(阅读原文里怎么加word)

   搜狗SEO    

参考《c++ qt4编程(第二版)》19.2章节

一个QSpinBox的组成部分如下:


使用QStyle绘制默认的QSpinBox就会绘制这些元素:



这就是QStyle绘制的默认QSpinBox。

要绘制一个自定义的QSpinBox只需要在自定义的风格里面绘制这几个元素就行了。

从drawComplexControl函数开始绘制:



这里drawBronzeSpinBoxButton()函数用来绘制上下按钮,



即这两个

函数传入了整个QSpinBox的QStyleOptionComplex

绘制上按钮SC_SpinBoxUp的过程如下:

其中PrimitiveElement是原始元素,这里设置成向左和向右的箭头,也可以设置成别的,调用重载函数drawPrimitive()进行绘制,可以在该函数里自由绘制,如PE_IndicatorSpinUp默认绘制是一个上三角



你可以在这里自由指定当绘制PE_IndicatorSpinUp元素时绘制文字



然后是绘制文本框SC_SpinBoxEditField

重写函数subControlRect里面定义了子控件的绘制范围


效果:



总的来说使用qstyle绘制自定义的控件是非常繁琐的,一般不建议使用。

免费学习C++ Qt开发教程视频,点击下面链接免费报名领取视频学习资料

C/C++项目实战/Qt5/C语言/c++/数据库/OpenCV/MFC/QT项目-学习视频教程-腾讯课堂


按上一篇绘制自定义QSpinBox的过程,再来绘制一个QSpinBox。

设计图:



把按钮放上面

在这之前先看一下成品:

上一篇说了,绘制自定义QSpinBox实际上就是给QSpinBox中的这些原始组成元素指定好位置并绘制出来。



设计这些元素的尺寸如下:



即确定子控件位置的subControlRect()函数:

然后开始绘制:

绘制从drawComplexControl()函数开始,首先绘制上下按钮



这个函数用来绘制上下按钮的背景和按钮上面的图标

背景使用了线性渐变,如果没有好的渐变配色方案可以参考这里:收藏 | 四个免费的渐变配色网站!

这里绘制的时候使用了adjusted(+1, +1, -1, -1),即给四周留下了一点空间显得不拥挤。绘制完上下按钮的背景时的效果:



然后是绘制按钮的图标,

这里从subControlRect()获取上下按钮的范围之后再次压缩了范围



在此范围内绘制图标

这里设置了上下按钮分别使用PE_IndicatorSpinPlus / PE_IndicatorSpinMinus,默认是代表加减号的意思。

如果使用默认设置,在drawPrimitive()中直接调用 QProxyStyle::drawPrimitive(which, option, painter, widget);效果:



不太好看,我们按设计图给它画上三角形。



这里注意:

painter指针是绘制一开始起从drawComplexControl()函数传过来的,每次绘制前设置painter->save();保存设置绘制完成painter->restore();恢复设置,到drawPrimitive()绘制的原点还是在上下按钮的(0,0)点,设置painter->translate(option->rect.x(),option->rect.y());是将绘制的原点设为绘制图标的原点,就比较方便



下一步是给SC_SpinBoxEditField加上边框:



此时的效果:


到这基本完成,然而编辑框里的数字太小了,这里可以设置它的字体并设置文本居中:

最终效果:

样式完整代码:

.h文件:

public:

.cpp文件:

按照之前的方法再来绘制两个QSpinBox。

设计图:



根据这个设计图改写子控件位置:

绘制背景和图标:


其他的都和上一篇一样。

效果:

再来画最后一个,



和前面的整体区别不大就是椭圆形的

其他的地方不需要改,只需要改这里,绘制上下键背景的时候由绘制圆角矩形改成绘制弧形:

效果:


免费学习C++ Qt开发教程视频,点击下面链接免费报名领取视频学习资料

C/C++项目实战/Qt5/C语言/c++/数据库/OpenCV/MFC/QT项目-学习视频教程-腾讯课堂


原文链接:https://blog.csdn.net/kenfan1647/article/details/110680037

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。