对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反而没有扁平化来得亲切。

Flat UI是基于Bootstrap之上进行二次开发的扁平化前端框架,他提供了动感、时尚的风格色调搭配,简洁、炫丽的功能组件,同时还提供了更为平滑的js交互动画,可以称得上前端扁平化设计框架的优秀代表之一。

既然是扁平化设计框架的优秀代表,当然需要在自己项目中应用应用,本人最早使用VB开发,而后转为C#开发,最后转为Qt开发,都是因为公司项目需要,根据需要不断学习新的编程框架,语言都是相通的,举一反三,以前用C#写的vista时钟控件和vista日历控件,稍微改改就转移成了Qt写的对应控件,非常方便,只要掌握了思想,熟练了一门语言和框架之后,其他的学起来特别快。

Qt中的qss机制,和css极为相似,感觉就是脱胎于css,用qss来实现Qt界面样式不是一般的方便,而是相当的爽,在看到FlatUI这样的精美的扁平化设计样式后,难以抑制手痒痒,就想用qss实现类似的风格。

第一步:实现按钮风格

按钮在大部分的可视化界面的项目中,出现的频率不是第一也是第二,所以首先来实现按钮对应的flat UI 扁平化风格。

根据官网的效果看,基本上要实现的就三种状态(正常状态+鼠标悬停状态+鼠标按下)(还有一种禁用状态)的两种颜色(背景色+前景色)的设置,前景色一般指的是文字颜色。

将改变对应按钮样式风格封装成一个函数,这样每次调用只需传入对应参数即可。

void frmMain::setBtnQss(QPushButton *btn,QString normalColor, QString normalTextColor,QString hoverColor, QString hoverTextColor,QString pressedColor, QString pressedTextColor){QStringList qss;qss.append(QString("QPushButton{border-style:none;padding:10px;border-radius:5px;color:%1;background:%2;}").arg(normalTextColor).arg(normalColor));qss.append(QString("QPushButton:hover{color:%1;background:%2;}").arg(hoverTextColor).arg(hoverColor));qss.append(QString("QPushButton:pressed{color:%1;background:%2;}").arg(pressedTextColor).arg(pressedColor));btn->setStyleSheet(qss.join(""));}

使用时调用:

setBtnQss(ui->btn1, "#34495E", "#FFFFFF", "#4E6D8C", "#F0F0F0", "#2D3E50", "#B8C6D1");setBtnQss(ui->btn2, "#1ABC9C", "#E6F8F5", "#2EE1C1", "#FFFFFF", "#16A086", "#A7EEE6");setBtnQss(ui->btn3, "#3498DB", "#FFFFFF", "#5DACE4", "#E5FEFF", "#2483C7", "#A0DAFB");setBtnQss(ui->btn4, "#E74C3C", "#FFFFFF", "#EC7064", "#FFF5E7", "#DC2D1A", "#F5A996");

第二步:实现文本输入框的风格

根据官网的效果看,基本上就是两种状态(正常状态+获得焦点状态)的两种颜色(边框颜色+文字颜色)的设置。

void frmMain::setTxtQss(QLineEdit *txt, QString normalColor, QString focusColor){QStringList qss;qss.append(QString("QLineEdit{border-style:none;padding:6px;border-radius:5px;border:2px solid %1;}").arg(normalColor));qss.append(QString("QLineEdit:focus{border:2px solid %1;}").arg(focusColor));txt->setStyleSheet(qss.join(""));}

使用时调用:

setTxtQss(ui->txt1, "#DCE4EC", "#34495E");setTxtQss(ui->txt2, "#DCE4EC", "#1ABC9C");setTxtQss(ui->txt3, "#DCE4EC", "#3498DB");setTxtQss(ui->txt4, "#DCE4EC", "#E74C3C");

第三步:实现进度条的风格

根据官网的效果看,基本上就是两种颜色(正常背景色+当前值背景色)的设置。

void frmMain::setBarQss(QProgressBar *bar, QString normalColor, QString chunkColor){int barHeight = 8;int barRadius = 8;QStringList qss;qss.append(QString("QProgressBar{font:9pt;height:%2px;background:%1;border-radius:%3px;text-align:center;border:1px solid %1;}").arg(normalColor).arg(barHeight).arg(barRadius));qss.append(QString("QProgressBar:chunk{border-radius:%2px;background-color:%1;}").arg(chunkColor).arg(barRadius));bar->setStyleSheet(qss.join(""));}

使用时调用:

setBarQss(ui->bar1, "#E8EDF2", "#E74C3C");setBarQss(ui->bar2, "#E8EDF2", "#1ABC9C");

第四步:实现滑块条的风格

根据官网的效果看,基本上就是三种颜色(默认背景色+当前值背景色+滑块颜色)的设置。

这里为了好看,特意将滑块改成圆形,这样更好看些。

void frmMain::setSliderQss(QSlider *slider, QString normalColor, QString grooveColor, QString handleColor){int sliderHeight = 8;int sliderRadius = 4;int handleWidth = 13;int handleRadius = 6;int handleOffset = 3;QStringList qss;qss.append(QString("QSlider::groove:horizontal,QSlider::add-page:horizontal{height:%2px;border-radius:%3px;background:%1;}").arg(normalColor).arg(sliderHeight).arg(sliderRadius));qss.append(QString("QSlider::sub-page:horizontal{height:%2px;border-radius:%3px;background:%1;}").arg(grooveColor).arg(sliderHeight).arg(sliderRadius));qss.append(QString("QSlider::handle:horizontal{width:%2px;margin-top:-%3px;margin-bottom:-%3px;border-radius:%4px;""background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #FFFFFF,stop:0.8 %1);}").arg(handleColor).arg(handleWidth).arg(handleOffset).arg(handleRadius));slider->setStyleSheet(qss.join(""));}

使用时调用:

setSliderQss(ui->slider1, "#E8EDF2", "#1ABC9C", "#1ABC9C");setSliderQss(ui->slider2, "#E8EDF2", "#E74C3C", "#E74C3C");

依次下去,还可以实现单选框、复选框、开关按钮等控件的样式。

其实在整个过程中和界面设计效果看,有一个核心就是颜色的搭配,很多人可能会问,我怎么知道那个颜色值是多少,推荐一个工具,绿色小巧无污染,叫屏幕拾色器,是要按住吸管往你看到的页面地方移动过去,就会自动将该颜色的值吸过来显示。我自己也用Qt实现过类似的这样一个小工具。

最终效果图:

完整源码下载:http://download.csdn.net/detail/feiyangqingyun/9708136

除了qss样式控制外观外,还有一种办法也可以实现类似效果,而且更灵活,那就是自定义控件,用Qpainter重绘外观,尤其是高级控件的话用qss就很难实现,下面就是我重绘的一些自定义控件。

转载于:https://www.cnblogs.com/feiyangqingyun/p/6159849.html

Qt实现FlatUI样式(开源)相关推荐

  1. 开源项目推荐:本人收集的有关Qt的GitHub/Gitee开源项目(★精品收藏★)

    尊重作者,支持原创,如需转载,请附上原地址:开源项目推荐:Qt有关的GitHub/Gitee开源项目(★精品收藏★)_$firecat全宏的代码足迹$-CSDN博客_qt开源项目https://lib ...

  2. qt自定义控件的样式

    引言 自定义控件创建后,有时需要设置样式,下面记录一下设置样式时需要注意的点. 注意 1.设置自定义控件的样式时,需要下面的代码: void paintEvent(QPaintEvent *event ...

  3. [转载]Qt之鼠标样式

    原文地址:Qt之鼠标样式作者:一去丶二三里 Qt中可以自定义鼠标样式,无论是为了美观,还是遵从同行业标准,或者说是界面友好性都需要了解. 使用setCursor(Qt::CursorShape)来设置 ...

  4. [转载]Qt之鼠标样式_vortex_新浪博客

    原文地址:Qt之鼠标样式作者:一去丶二三里 Qt中可以自定义鼠标样式,无论是为了美观,还是遵从同行业标准,或者说是界面友好性都需要了解. 使用setCursor(Qt::CursorShape)来设置 ...

  5. Qt控件样式之QSS

    QSS常用于Qt的控件样式美化,合理地使用Qss可以完成在不改动代码的情况下改变Qt界面的样式. 官方提供的例子: http://qt-project.org/doc/qt-4.8/styleshee ...

  6. qt 好的 github 开源

    1 https://github.com/kevinlq 一些QT开源项目 来源 :https://www.zhihu.com/question/41812714/answer/92575811 qy ...

  7. qt设置圆形按钮_Qt开源作品25-电池电量控件

    一.前言 现在这个时代,智能手机不要太流行,满大街都是,甚至连爷爷奶奶级别的人都会用智能手机,本次要写的控件就是智能手机中的电池电量表示控件,采用纯painter绘制,其实也可以采用贴图,我估计大部分 ...

  8. qt 进度条_Qt开源作品12-硬盘容量控件

    一.前言 磁盘容量统计控件,说白了,就是用来统计本地盘符占用的容量,包括但不限于已用空间.剩余空间.总大小.已用百分比等,其中对应的百分比采用进度条显示,该进度条的前景色和背景色及文字颜色可以设置,在 ...

  9. qt串口采用队列_基于STM32的RGB调色器——STM32程序和Qt上位机全开源

    前言 uFUN开发板1.0版本评测时,基于Qt写了个小上位机,可以通过串口来控制板子上的RGB灯,通过控制,可以混合出任意的颜色,今天整理了一下,开源这个Qt上位机和STM32代码. 项目介绍 基于u ...

最新文章

  1. js动态变量名_scss引入其他scss变量,并通过js动态修改scss变量
  2. Logstash(一)的入门与运行机制
  3. 静态程序分析chapter3 - 数据流分析详述(Reaching Definitions、Live Variables、Available Expressions Analysis)
  4. Average and Median(500)dp,二分 AtCoder Beginner Contest 236
  5. python源码精要(6)-CPython编译标志
  6. osg中实现HUDAxis功能
  7. Windows 10下,如何使用PowerShell批量重启局域网电脑
  8. cad必练10张图_CAD比例问题大详解!赶紧收藏!
  9. java 和javafx_Java,JavaFX的流利设计风格文本字段和密码字段
  10. python输出星号_Python的星号(*、**)的作用
  11. birt project mysql_eclipse birt如何连接mysql数据库 配置文件
  12. a4纸网页打印 table_打印模板不愁人,你还在打印单调的A4纸吗?
  13. Windows Vista和局域网聊天的计算机
  14. 是什么决定了我们以何种方式赚钱?
  15. laravel路由不生效,404,除了/ 都不行,关于nginx环境下laravel除了默认路由都出现404报错的处理方法...
  16. 用MATLAB画出双极性NRZ,[工学]通信原理MATLAB仿真教程第7章.ppt
  17. 用计算机运算符编写检索式,检索式
  18. Dapper系列之三:Dapper的事务修改与删除
  19. matlab TVdenoise,TV_Denoise TV全变分模型图像去噪 以及高斯模糊处理 2D Graphic 2D图形编程 272万源代码下载- www.pudn.com...
  20. android 实现谷歌地图

热门文章

  1. java: \uxxxx unicode编码
  2. 办公文档加密,企业文档加密,强制性透明加密技术,fasoft
  3. 如何在linux里如何查看每个文件大小
  4. 警惕!勒索病毒DXXD 2.0版来袭,黑客称只能缴纳赎金无法破解
  5. 【ASM 翻译系列第二弹:ASM 12C 版本新特性】
  6. 聊一聊js中的null、undefined与NaN
  7. 【原创】一种维护型项目升级打包的解决方案
  8. FTP虚拟账户的创建(1)
  9. winxp登陆后自动注销
  10. 使用Docker迁移与备份