太阳神三国杀的界面很绚丽,界面上按钮的图标,鼠标移入移出时图标的变化,日志和聊天Widget的边框和半透明等效果,既可以通过代码来控制,也可以使用皮肤文件qss进行控制.下面我们分析一下三国杀的qss文件.

在main.cpp中可以看到如下几句关键代码:

QDir::setCurrent(qApp->applicationDirPath());//设置当前目录为程序的可执行文件所在目录

//设置皮肤
    QFile file("sanguosha.qss");
    if(file.open(QIODevice::ReadOnly)){
        QTextStream stream(&file);
        qApp->setStyleSheet(stream.readAll());
    }

首先设置当前路径,并在当前路径下加载sanguosha.qss文件,将其内容全部读取出来作为qApp->setStyleSheet的参数,从而设置了应用程序的皮肤.

要学习使用qss,首先需要了解qss中的选择器语法,常用的有如下几类:

1 控件类名#控件名称         指定控件类,控件名称 后跟效果描述

2 控件类名:状态                   指定控件类,控件的状态 后跟效果描述 如按钮的鼠标悬停状态等等

3 控件类名::子控件类名      指定控件类,子控件类名 后跟效果描述 如分组框中的按钮

4 控件类名                            直接指定控件类 后跟效果描述 将影响程序中所有该类控件的显示效果

5 控件名称[属性名称=属性值] 指定控件类,控件实例的属性值 后跟效果描述 只影响控件实例中属性值符合条件的控件显示效果

下面看看sanguosha.qss文件的内容,并逐一解释.

QProgressBar{
    color : solid gray;
    border: 2px solid gray;
    border-radius: 5px;
    background: transparent;
    padding: 0px;
    text-align : center ;
}
QProgressBar::chunk{     //设置进度块的背景颜色
    background: #B22222;
}

QTextEdit{
    border: 10px;
    border-image: url(image/system/border.png)10 10 10 10 ;//设置边框显示的图片
    background-color: rgba(43,45,31,120);//设置背景色,注意使用rgba,有透明效果
}

QTextEdit[description="true"]{//对QTextEdit控件,而且其description属性必须设置为true的实例生效
    border: 10px;
 border-image: none;
    background-color: rgba(255,255,255,255);
}

QTextEdit QScrollBar:vertical  {  //这是一个子控件选择器,设置QTextEdit的子控件QScrollBar--状态为垂直时的效果

margin: 22px 0 22px 0;
}

QScrollBar:add-page  //QScrollBar状态为add-page时的效果
{
     background-color: rgba(0,0,0,200);
}

QScrollBar:sub-page //QScrollBar状态为sub-page时的效果
{
     background-color: rgba(0,0,0,200);
}

QScrollBar::add-line:vertical  {  //::表示子控件  :表示所处状态

background-color: rgba(43,45,31,200);
     height: 15px;
     subcontrol-position: bottom;
     subcontrol-origin: margin;
 }

QScrollBar::sub-line:vertical  {//::表示子控件  :表示所处状态

background-color: rgba(43,45,31,200);
     height: 15px;
     subcontrol-position: top;
     subcontrol-origin: margin;
 }

QScrollBar::handle:vertical    {//::表示子控件  :表示所处状态
    border : 2px solid gray;
    border-radius: 6px;
    background-color: solid gray;
    min-height : 12px;
}

QScrollBar::up-arrow:vertical  //::表示子控件  :表示所处状态
{
    border-image: url(image/system/button/scroll-up-arrow.png);
}

QScrollBar::down-arrow:vertical  //::表示子控件  :表示所处状态
{
    border-image: url(image/system/button/scroll-down-arrow.png);
}

QLineEdit#chat_edit{  //控件类名称#控件名称 表示只针对叫做chat_edit的QLineEdit生效
    background-color: rgba(20,20,20,200);
    color: white;
    border: 10px transparent;
    height: 20px;
    border-image: url(image/system/border.png)10 10 10 10 ;
 }

QStatusBar::item {
     border: 0px solid grey;
 }
 
QStatusBar{
 background-image: url(image/system/skill-dock.png);
 color:white;
}

QMenu[private_pile="true"]{  //中括号指定属性值,只有属性值满足,效果才生效
    background-color: rgba(43,63,53,100);
    border-radius: 5px;
    color: white;
}

QPushButton[private_pile="true"]{ //中括号指定属性值,只有属性值满足,效果才生效
    background-color: rgba(43,63,53,100);
    border-radius: 5px;
    color: white;
}

QPushButton[game_control="true"]{ //中括号指定属性值,只有属性值满足,效果才生效
    border: 0px solid gray;
    font: 12px;
    border-radius: 5px;
    padding: 6px 12px 6px 12px;
}

QPushButton#free-discard{  //指定一个按钮上的背景图
    background-image: url(image/system/button/free-discard.png);
}

QPushButton#free-discard:disabled{ //指定一个按钮在disabled状态下的背景图
    background-image: url(image/system/button/free-discard-disabled.png);
}

QPushButton#reverse-select{ //指定一个按钮上的背景图
    background-image: url(image/system/button/reverse-select.png);
}

QPushButton#reverse-select:disabled{ //指定一个按钮在disabled状态下的背景图
    background-image: url(image/system/button/reverse-select-disabled.png);
}

QPushButton#pause{
    background-image: url(image/system/button/pause.png);
}

QPushButton#play{
    background-image: url(image/system/button/play.png);
}

QPushButton#slow-down{
    background-image: url(image/system/button/slow-down.png);
}

QPushButton#speed-up{
    background-image: url(image/system/button/speed-up.png);
}

QPushButton#uniform{
    background-image: url(image/system/button/uniform.png);
}

//由于skill_bar_container是状态栏的名称,而状态栏是自动生成的,因此需要在代码中特意设置一次状态栏的名称,以便于qss中设置样式.

//main_window->statusBar()->setObjectName("skill_bar_container");

#skill_bar_container QPushButton{  //#空间名称 子控件 指定skill_bar_container控件下包含的所有QPushButton类的效果
 background-image: url(image/system/button/back.png);
        border: 1px solid gray;
        border-radius: 4px;
 color: yellow;
 font: 12px;
 padding: 6px 12px 6px 12px;
}
#skill_bar_container QPushButton:disabled{  //指定skill_bar_container控件下包含的所有QPushButton类在disabled时的效果
 background-image: url(image/system/button/back_shade.png);
        border-radius: 4px;
 color: white;
 font: 12px;
}
#skill_bar_container QCheckBox{
 border: 1px solid gray;
        border-radius: 4px;
 color: yellow;
 font: 12px;
 padding: 1px 12px 1px 8px;
}
#skill_bar_container QCheckBox::indicator{
 height: 0px;
 width: 0px;
}
#skill_bar_container QCheckBox:unchecked{
 background-image: url(image/system/button/frequent_checkbox/unchecked.png);
}
#skill_bar_container QCheckBox:unchecked:hover{
 background-image: url(image/system/button/frequent_checkbox/unchecked_hover.png);
}
#skill_bar_container QCheckBox:unchecked:pressed{
 background-image: url(image/system/button/frequent_checkbox/unchecked_press.png);
}
#skill_bar_container QCheckBox:checked{
 background-image: url(image/system/button/frequent_checkbox/checked.png);
}
#skill_bar_container QCheckBox:checked:hover{
 background-image: url(image/system/button/frequent_checkbox/checked_hover.png);
}
#skill_bar_container QCheckBox:checked:pressed{
 background-image: url(image/system/button/frequent_checkbox/checked_press.png);
}
#skill_bar_container QComboBox{
 background-image: url(image/system/button/back2.png);
 border: 1px solid gray;
 border-radius: 3px;
 color: white;
 padding: 1px 18px 1px 3px;
}
#skill_bar_container QComboBox:on{
 padding-left: 4px;
 padding-top: 3px;
}
#skill_bar_container QComboBox::drop-down{
 border-bottom-right-radius: 3px;
 border-left-color: darkgray;
 border-left-style: solid;
 border-left-width: 1px;
 border-top-right-radius: 3px;
 subcontrol-origin: padding;
 subcontrol-position: top right;
 width: 15px;
}
#skill_bar_container QComboBox::down-arrow:on{
 left: 1px;
 top: 1px;
}

vs2008编译QT开源项目--太阳神三国杀源码分析(三) 皮肤相关推荐

  1. vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析

    请参看 http://tieba.baidu.com/f?kz=1508964881 按照上面的网址教程,下载三国杀源码,swig工具,并下载最新的QT4.8.2 for vs2008.我本机已经安装 ...

  2. vs2008编译QT开源项目--太阳神三国杀源码分析(四) 动画

    太阳神三国杀中,每当玩家出杀或吃桃子时,就会有一个动画效果,使界面非常生动绚丽.现在我们就分析一下QT中动画的原理,及实现方式,这里我们只分析吃桃子时的动画效果实现.由于三国杀有多个在线玩家同时游戏, ...

  3. vs2008编译QT开源项目--太阳神三国杀源码分析(二) 客户端添加武将

    接着上篇文章继续分析,我们来看看进入到roomScene(房间场景)后,点击add a robot按钮,是如何创建武将的.首先找到add to robot按钮的创建代码: add_robot = ne ...

  4. vs2008编译QT开源项目--太阳神三国杀源码分析(五) 分牌及出牌

    游戏开始时选择武将后,服务端统一控制向玩家分发初始手牌,并向客户端发生绘制手牌的命令.跟踪的流程如下:服务端向客户端发送命令drawCards及随后的一串使用加号(+)连接起来的牌编号(drawCar ...

  5. Mac下编译太阳神三国杀源码

    Mac系统版本是10.13.2,Qt版本是5.11,参考官方博文:太阳神三国杀 Mac 版构建指南 安装Qt5 下载最新的Qt5安装包qt-opensource-mac-x64-5.11.0.dmg, ...

  6. 开源项目-太阳神三国杀-QT4编译教程

    待更中 转载于:https://www.cnblogs.com/sinpener/p/10734692.html

  7. android studio 项目源码_这个标星 2.3k+ 的项目带你 Android 源码分析从入门到放弃...

    上次写了一篇 Android 开发者的福利,介绍几款看源码的工具 ,这篇文章主要介绍了三款看 Android 源码的工具,后台有很多同学留言问,有没有分析源码的. 分析源码的文章也很多,但大多数文章不 ...

  8. (4.2.40)阿里开源路由框架ARouter的源码分析

    一需求背景 1 Android原生方案的不足 2 自定义路由框架的适用场景 3 对自定义路由框架的设想 二ARouter的概述 三ARouter的引入和使用 四源码分析 1 arouter-annot ...

  9. Journey源码分析三:模板编译

    2019独角兽企业重金招聘Python工程师标准>>> 在Journey源码分析二:整体启动流程中提到了模板编译,这里详细说下启动流程 看下templates.Generate()源 ...

最新文章

  1. RHEL5.5学习--安装vmtools
  2. 【PAT (Basic Level) 】1024 科学计数法 (20 分)
  3. 副连长是什么级别_“上尉副连长”和“中尉连长”谁的级别高 别再傻傻不知道!...
  4. 单源最短路径-Dijkstra(迪杰斯特拉算法)
  5. [新闻]Ubuntu7.04于4月19日全球同步发布
  6. Minikube-运行在笔记本上的Kubernetes集群
  7. 手机相片删除了怎么恢复? 手机照片恢复方法汇总
  8. 那年学过的Oracle笔记
  9. Effective C++ 条款42
  10. [转]Using TRY...CATCH in Transact-SQL
  11. WordPress插件:WP-China-Yes解决国内访问官网慢的方法
  12. Java基础编程练习题
  13. 室内GPS定位初露峥嵘
  14. 配置KDiff3作为GIT merge图形化工具
  15. 有哪个瞬间让你觉得这个世界出bug了?
  16. 10个python办公黑科技,助你办公效率提高100倍
  17. z3求解器(SMT)解各类方程各种逻辑题非常简单直观
  18. 经典网络结构分析:卷积神经网络的现代雏形 ---LeNet
  19. 音符和频率的对应关系计算
  20. CCleaner软件一键查找/删除重复文件

热门文章

  1. clustMD r语言_利用R语言实现微阵列数据分析-聚类分析
  2. 使用R语言ggplot2包绘制pathway富集分析气泡图(Bubble图):数据结构及代码
  3. 解决GAMIT10.71解算北斗二号三号观测值问题
  4. 使用ShareSDK集成分享框架
  5. D类音频功放(CS8120例)
  6. Java+JSP+Mysql+Tomcat实现Web图书管理系统
  7. 物联网浪潮之下,前端工程师如何迎刃而上?
  8. 为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE 1
  9. 第三集 Spring for Apache Kafka 接受消息
  10. JavaWeb练习题(含答案)