使用 Qt 制作 Skin

转载 2005年04月26日 16:47:00
2003 年 1 月 01 日
Skin(表皮) 是制作比较酷的软件界面的有利工具. 一个软件可以同时使用多种Skin 以取得不同的外观, 使同一个软件有截然不同的风格. 用户可以根据自己的喜好选择 不同的风格. 本节介绍使用 Qt 制作 Skin 的方法.

软件界面的风格变化可以通过两种机制完成,一种是通过设置主题(Themes),它使用 界面库本身所具有的对界面组件(Components)的控制能力切换显示风格;另外一种是 通过提供不同系列的图片来切换显示界面,即这里所讲的 Skin。

制作表皮有几个重要的因素值得考虑:

1. 使用无边界的窗口 在 XWindow 下,无边界的窗口是指不受窗口管理器管理的边界不规则的窗口。由于 不受窗口管理器管理管理,所以软件窗口界面没有附加的标题条(Title Bar)等。 在Qt中,建立无边界窗口的最简单的方法 是设置 QWidget 的 WFlags 的值是 WStyle_NoBorder。它定义在 qnamespace.h 中。 不规则窗口的特点则要求对整个 窗口使用图像掩码。使用 X 窗口形状的扩展(X Shape Extension)来达到要求。在 Qt 中可以直接使用,


                QBitmap bm;
                bm = *(Pixmaps[MASK]);
                setMask(bm);
                setBackgroundPixmap(*Pixmaps[BACKGROUND]);
                

2. 窗口的移动 由于上述窗口不受窗口管理器的管理的特性,所以移动窗口需要特殊处理,一般的 方法是截取根Widget的鼠标按钮事件,自己处理鼠标点击和移动的事件。


                void SkinDemo::mouseMoveEvent(QMouseEvent *e)
                {
                        QPoint newpos = e->globalPos();
                        QPoint upleft = pos0 + newpos - last;
                        move(upleft);
                }

                void SkinDemo::mousePressEvent(QMouseEvent *e)
                {
                        last = e->globalPos();
                        pos0 = e->globalPos() - e->pos();
                }
                

这里我们取得的鼠标位置是绝对位置,即相对于根窗口的位置,同时也记录下窗口 左上角的位置,当鼠标移动时,取得新的绝对位置,则窗口左上角 的新位置应该 是原来位置与鼠标移动的位置之差。

3. 按钮的制作 在例子( qt-skin-example.tar.gz) 中,我们重新定义了鼠标按下和鼠标移动的事件处理 函数, 并且含有按钮的所有信息,主工作区的所有信息等。主工作区的信息是它的 位置和尺寸,主窗口的信息是它所使用的背景图片和图片的掩码(用来制造不规则窗 口),所以整个主窗口的大小可以由图片的尺寸来决定。几个按钮的信息包含它们的 位置,它们的大小由图片的大小来决定。

对于表皮中的图像按钮,设置它的父类是 QButton,这种按钮由两幅图片构成, 一幅图片是正常状态(Normal),一幅图片是按钮按下时的状态(Activated)。有时 也可以设置成四种状态,即增加禁止状态(Disabled)和鼠标指针进入时的状态 (Hovered)。

下面是程序运行结果之一:

2003 年 1 月 01 日 www-128.ibm.com/developerworks

Qt制作Skin(皮肤)总结

使用Skin(皮肤)是制作酷酷界面的一 个有利的工具,在用户界面GUI越来越重要的今天,一个应用程序如果只有一套皮肤,不能更换皮肤,那么这个应用程序的生命力是非常值得人们怀疑的;那么使 用Qt如何制作...

全面拥抱 Qt 4.6 + 让Qt应用程序支持换肤(Skin)功能

转自:http://www.linuxidc.com/Linux/2010-12/30223p6.htm Qt程序一直给人的印象是正规的GUI程序的模样.在嵌入式Linux下,Qtopia的桌面看起...

为flash程序制作皮肤【皮肤映射类Skin】

为flash程序制作皮肤【皮肤映射类Skin】转载自http://www.wedoswf.com/posts?page=83 skin类是一个为了更方便的访问皮肤中的...

asp.net主题文件(css+.skin)的使用

一、简介:     关于主题文件的创建,请参看本博客http://blog.sina.com.cn/s/blog_67aaf4440100nl5k.html   利用Themes我们可以很容易的更...

ADF11g-012:使用 ADF Skin

本文描述如何在ADF项目中使用自定义SKIN。 1.新建ADF项目 2.在Jdeveloper中引入XML Schema     进入菜单——Tools——Preference——XML Sch...
  • ygj26
  • ygj26
  • 2012年09月05日 11:22
  • 2243

Libgdx Skin的使用

坑爹啊,弄了好久Libgdx的skin,总是有很多的地方没有搞明白,后来发现自己的libgdx版本不是最新的,但是自己参考的却是最新的代码。所以大家一定要先下载最新的libgdx的jar包,这个名为N...
  • Yelbosh
  • Yelbosh
  • 2012年09月19日 21:44
  • 3518

Skin++ For VS2010 使用教程

一、 概述 Skin++是一款通用的软件换肤套件,目前支持各种版本操作系统,Windows2000、WindowsXP、Windows7。支持各种开发语言,VC、VB、C#、PB、Delphi、C+...

Skin++的使用 (vs2008可行)

Skin++的使用 (vs2008可行) 一.使用皮肤 将SkinPPWTL.lib 、skinppwtl.dll 、SkinPPWTL.h三个文件及相应皮肤(**.ssk)拷贝至工程文件夹下;一...

asp.net主题文件(css+.skin)的使用

一、简介:     关于主题文件的创建,请参看本博客http://blog.sina.com.cn/s/blog_67aaf4440100nl5k.html   利用Themes我们可以很容易的更...

使用skin++进行MFC界面美化范例

1.下载skin++皮肤库和皮肤库,skin++皮肤库主要包括:SkinPPWTL.dll,SkinPPWTL.lib,SkinPPWTL.h这三个文件。把这三个文件 拷贝到工程目录下。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 Qt 制作 Skin
举报原因:
原因补充:

(最多只允许输入30个字)