全部博文(584)
分类: 嵌入式
2011-04-06 22:45:05
基于QT的换肤整体解决方案(QSkinStyle)
对QT这个成功的跨平台GUI库,本身内置了对换肤功能的实现,比如cleanlooks、plastique等跨平台风格;还有一些是和平台相关的风
格,比如WindowsXP、WindowsVista风格只能用在windows平台上,底层也会调用uxtheme.dll来实现windows的风
格。
QT内置的风格(qwindowsstyle、qmotifstyle、qcdestyle等),都是针对不同的风格定义(metric、look
and fell等),通过画点、画线方式来实现的,这样可以确保在不同的平台上,外观都是一致的。可以预见的是,这样的方法繁杂琐碎,需要耐心和勇气。
比较好的方式是QStyleSheetStyle,它采用了类似CSS的方式来定义widget的外观和widget在运行时对状态的反映,简单而且高效。对于windows平台,它依然无法对宿主窗口(标题条和边框)进行换肤,除非进行特殊的处理。
QSkinStyle是通过皮肤文件来实现QT换肤的,皮肤文件定义了widget的外观和widget在运行时对状态的反映,在不同的平台上,外观都是一致的。还有一些特殊功能:比如宿主窗口换肤,状态间切换时的动态效果,支持svg格式的皮肤图片等。
以下是QSkinStyle在windows和linux上运行的换肤截图。
linux widget:
windows widget:
linux mdi:
windows mdi: