类型:C++ & Qt4,创建时间:Jan. 1, 2012, 6:01 p.m.
标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/68/。
KDE的Phase样式是我最喜欢的样式之一。我觉得它看起来非常稳重、简洁,很适合作为日常工作的默认样式。原来以为它只能工作在KDE环境,直到半年前看KDE代码的时候才发现它原来是一个Qt样式,因此,开发Windows软件的时候完全也可以使用它。
在Windows下编译Phase样式很简单,只要把Phase的三个文件复制过来,假定放在D:\phase
下。然后编写这么一个工程文件:
#phase.pro TEMPLATE = lib CONFIG += plugin HEADERS += bitmaps.h phasestyle.h SOURCES += phasestyle.cpp
接下来Qt程序编译标准步骤:
h:\phase> qmake h:\phase> mingw32-make release
编译成功后,可以在h:\phase\release
下找到phase.dll文件,复制到Qt的$QTDIR\plugins\styles
目录后就可以使用Phase样式了(附注:也可以写一个target.path=***
,然后mingw32-make install
安装到Qt目录内)。 大多数Qt程序都接收一个命令行参数,用于指定程序的样式:
designer.exe -style phase
如果就这么搞定,这篇文章似乎就没什么价值了。细心的朋友应该会发现,Windows下Phase样式所有的滚动条都没有小箭头,并且工具提示也不能显示出来。这两个问题困扰了我半年,在kde.org上提BUG没人解决,终于我决定还是自己动手丰衣足食吧。
修改第一个BUG要在phasestyle.cpp加入几条语句:
在之前加入:painter->drawPoint(cx, cy);
1083行:painter->drawPixmap(cx-2, cy-2, bitmaps_[UArrow]);
在之前加入:painter->drawPoint(cx, cy);
1092行:painter->drawPixmap(cx-2, cy-2, bitmaps_[DArrow]);
在之前加入:painter->drawPoint(cx, cy);
1100行:painter->drawPixmap(cx-2, cy-2, bitmaps_[LArrow]);
在之前加入:painter->drawPoint(cx, cy);
1108行:painter->drawPixmap(cx-2, cy-2, bitmaps_[RArrow]);
修改第二个BUG要替换一小段代码:
原文:
switch (hint) { case SH_Menu_SpaceActivatesItem: case SH_TitleBar_NoBorder: case SH_ToolTipLabel_Opacity: return 1;
替换为:
switch (hint) { case SH_Menu_SpaceActivatesItem: case SH_TitleBar_NoBorder: return 1; case SH_ToolTipLabel_Opacity: return 255;
第一个BUG很奇怪,明明 bitmaps_[DArrow]是有内容的,并且cx-2
, cy-2
这个位置也没啥问题,就是画不出Pixmap出来,修改后随便用drawPoint
画个点,那个语句就有作用了。这个看起来似乎是Qt的BUG。希望有高手路过的话,指点我一下。
第二个BUG,按照Qt文档的说明,SH_ToolTipLabel_Opacity
应该返回0-255
之间的数值,255
表示不透明,而原来返回1
,接近于完全透明,所以显示工具提示时会出错。
重新编译,搞定。
ps:这两个BUG已经反馈给作者。回信说已经修复了。现在就简单了。
标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/68/。
暂时还没有任何评论。