• 6625阅读
  • 7回复

QStyle 工作原理 [复制链接]

上一主题 下一主题
离线weijie2722
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-20
今天是我第一次在这个论坛发帖,而且也是我学了qt三个星期后第一次发帖。
题外话----本人很喜欢Qt,对GUI编程很感兴趣,特别是控件的重绘、特效、动画十分感兴趣,想为其创建一套二次开发框架(近期目标)
正题:本人到OSChina看过某些控件源代码。以下为QPushbutton的paintevent函数


这个函数里面用到类似QStyle的东西。
而如果需要自定义外观
1.对控件的派生子类的paintEvent重写外;
2.对控件的stylesheet增加qss;
3.对QStyle进行子类化,并重写里面函数;
通过以上代码,我本来对QStyle的工作原理起疑问,现在有点想法,可能通过设置风格后,在paintevent里面直接套用QStyle风格,具体绘制代码可能在QStyle类里面。
而如果要加入类似高光的效果,以及渐变效果,是否应该在QStyle里面加入呢?
[/td][/tr][/table]
离线jdwx

只看该作者 1楼 发表于: 2011-11-20
回 楼主(weijie2722) 的帖子
好目标!
Qt有很多的Style类,控件都是在里面画的,但是Style被继承了好几次,每次增加一些个功能,
也就是说一个控件有可能分成好几个部分,分别在不同的类里画出来的。
这也是Qt界面反应慢的原因(不是大问题,对比MFC慢,绝对比非C++的快)。
个人认为:
1.对控件的派生子类的paintEvent重写
比较好,重写QSytle只能改变现有的控件外观,要是自己做控件呢?
间接还可以加快界面反应速度。

其实换肤,美化等等,我觉得没什么用,就说那个macosx,就那一个样子,多少年了都差不多,可是没几个人说难看的。相反windows倒是每个版本都不一样,反而会被说成游戏机界面。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线weijie2722

只看该作者 2楼 发表于: 2011-11-20
可能是用到组合模式来进行组合绘制,我本来也想用组合方式重写paintevent。
我觉得换肤和美化的只是在原来的控件基础上对外观的改变。
我是希望添加某些特效,如高光:


带有一定的渐变特效等。
离线ly48694869
只看该作者 3楼 发表于: 2011-11-22
除了重绘想不出其他办法~~
Qt前途如何??
离线jdwx

只看该作者 4楼 发表于: 2011-11-22
下面两幅图是iPhone的图片效果,只是修改图片了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线logens
只看该作者 5楼 发表于: 2012-10-16
很经典,受益匪浅
心随我意,我心翱翔
离线ggkuroky
只看该作者 6楼 发表于: 2012-10-21
不知道,Qt Style Sheets应该可以吧
相信自己,天道酬勤!
离线ggkuroky
只看该作者 7楼 发表于: 2012-10-21
QGradient这个类可以实现渐变效果,你看看吧!
相信自己,天道酬勤!
快速回复
限100 字节
 
上一个 下一个