在Windows下使用KDE的Phase样式


类型: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/。


暂时还没有任何评论。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):