Qt如何实现扁平化样式flatui
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍了Qt如何实现扁平化样式flatui,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言对于现在做前端开发人员来说,
千家信息网最后更新 2025年02月04日Qt如何实现扁平化样式flatui
这篇文章主要介绍了Qt如何实现扁平化样式flatui,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一、前言
对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反而没有扁平化来得亲切。
Flat UI是基于Bootstrap之上进行二次开发的扁平化前端框架,他提供了动感、时尚的风格色调搭配,简洁、炫丽的功能组件,同时还提供了更为平滑的js交互动画,可以称得上前端扁平化设计框架的优秀代表之一。
既然是扁平化设计框架的优秀代表,当然需要在自己项目中应用应用,本人最早使用VB开发,而后转为C#开发,最后转为Qt开发,都是因为公司项目需要,根据需要不断学习新的编程框架,语言都是相通的,举一反三,以前用C#写的vista时钟控件和vista日历控件,稍微改改就转移成了Qt写的对应控件,非常方便,只要掌握了思想,熟练了一门语言和框架之后,其他的学起来特别快。
Qt中的qss机制,和css极为相似,感觉就是脱胎于css,用qss来实现Qt界面样式不是一般的方便,而是相当的爽,在看到FlatUI这样的精美的扁平化设计样式后,难以抑制手痒痒,就想用qss实现类似的风格。
二、代码思路
QString FlatUI::setPushButtonQss(QPushButton *btn, int radius, int padding, const QString &normalColor, const QString &normalTextColor, const QString &hoverColor, const QString &hoverTextColor, const QString &pressedColor, const QString &pressedTextColor){ QStringList list; list.append(QString("QPushButton{border-style:none;padding:%1px;border-radius:%2px;color:%3;background:%4;}") .arg(padding).arg(radius).arg(normalTextColor).arg(normalColor)); list.append(QString("QPushButton:hover{color:%1;background:%2;}") .arg(hoverTextColor).arg(hoverColor)); list.append(QString("QPushButton:pressed{color:%1;background:%2;}") .arg(pressedTextColor).arg(pressedColor)); QString qss = list.join(""); btn->setStyleSheet(qss); return qss;}QString FlatUI::setLineEditQss(QLineEdit *txt, int radius, int borderWidth, const QString &normalColor, const QString &focusColor){ QStringList list; list.append(QString("QLineEdit{border-style:none;padding:3px;border-radius:%1px;border:%2px solid %3;}") .arg(radius).arg(borderWidth).arg(normalColor)); list.append(QString("QLineEdit:focus{border:%1px solid %2;}") .arg(borderWidth).arg(focusColor)); QString qss = list.join(""); txt->setStyleSheet(qss); return qss;}QString FlatUI::setProgressQss(QProgressBar *bar, int barHeight, int barRadius, int fontSize, const QString &normalColor, const QString &chunkColor){ QStringList list; list.append(QString("QProgressBar{font:%1pt;background:%2;max-height:%3px;border-radius:%4px;text-align:center;border:1px solid %2;}") .arg(fontSize).arg(normalColor).arg(barHeight).arg(barRadius)); list.append(QString("QProgressBar:chunk{border-radius:%2px;background-color:%1;}") .arg(chunkColor).arg(barRadius)); QString qss = list.join(""); bar->setStyleSheet(qss); return qss;}QString FlatUI::setSliderQss(QSlider *slider, int sliderHeight, const QString &normalColor, const QString &grooveColor, const QString &handleBorderColor, const QString &handleColor){ int sliderRadius = sliderHeight / 2; int handleWidth = (sliderHeight * 3) / 2 + (sliderHeight / 5); int handleRadius = handleWidth / 2; int handleOffset = handleRadius / 2; QStringList list; list.append(QString("QSlider::horizontal{min-height:%1px;}").arg(sliderHeight * 2)); list.append(QString("QSlider::groove:horizontal{background:%1;height:%2px;border-radius:%3px;}") .arg(normalColor).arg(sliderHeight).arg(sliderRadius)); list.append(QString("QSlider::add-page:horizontal{background:%1;height:%2px;border-radius:%3px;}") .arg(normalColor).arg(sliderHeight).arg(sliderRadius)); list.append(QString("QSlider::sub-page:horizontal{background:%1;height:%2px;border-radius:%3px;}") .arg(grooveColor).arg(sliderHeight).arg(sliderRadius)); list.append(QString("QSlider::handle:horizontal{width:%3px;margin-top:-%4px;margin-bottom:-%4px;border-radius:%5px;" "background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 %1,stop:0.8 %2);}") .arg(handleColor).arg(handleBorderColor).arg(handleWidth).arg(handleOffset).arg(handleRadius)); //偏移一个像素 handleWidth = handleWidth + 1; list.append(QString("QSlider::vertical{min-width:%1px;}").arg(sliderHeight * 2)); list.append(QString("QSlider::groove:vertical{background:%1;width:%2px;border-radius:%3px;}") .arg(normalColor).arg(sliderHeight).arg(sliderRadius)); list.append(QString("QSlider::add-page:vertical{background:%1;width:%2px;border-radius:%3px;}") .arg(grooveColor).arg(sliderHeight).arg(sliderRadius)); list.append(QString("QSlider::sub-page:vertical{background:%1;width:%2px;border-radius:%3px;}") .arg(normalColor).arg(sliderHeight).arg(sliderRadius)); list.append(QString("QSlider::handle:vertical{height:%3px;margin-left:-%4px;margin-right:-%4px;border-radius:%5px;" "background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 %1,stop:0.8 %2);}") .arg(handleColor).arg(handleBorderColor).arg(handleWidth).arg(handleOffset).arg(handleRadius)); QString qss = list.join(""); slider->setStyleSheet(qss); return qss;}QString FlatUI::setRadioButtonQss(QRadioButton *rbtn, int indicatorRadius, const QString &normalColor, const QString &checkColor){ int indicatorWidth = indicatorRadius * 2; QStringList list; list.append(QString("QRadioButton::indicator{border-radius:%1px;width:%2px;height:%2px;}") .arg(indicatorRadius).arg(indicatorWidth)); list.append(QString("QRadioButton::indicator::unchecked{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.7 %1);}").arg(normalColor)); list.append(QString("QRadioButton::indicator::checked{background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5," "stop:0 %1,stop:0.3 %1,stop:0.4 #FFFFFF,stop:0.6 #FFFFFF,stop:0.7 %1);}").arg(checkColor)); QString qss = list.join(""); rbtn->setStyleSheet(qss); return qss;}QString FlatUI::setScrollBarQss(QWidget *scroll, int radius, int min, int max, const QString &bgColor, const QString &handleNormalColor, const QString &handleHoverColor, const QString &handlePressedColor){ //滚动条离背景间隔 int padding = 0; QStringList list; //handle:指示器,滚动条拉动部分 add-page:滚动条拉动时增加的部分 sub-page:滚动条拉动时减少的部分 add-line:递增按钮 sub-line:递减按钮 //横向滚动条部分 list.append(QString("QScrollBar:horizontal{background:%1;padding:%2px;border-radius:%3px;min-height:%4px;max-height:%4px;}") .arg(bgColor).arg(padding).arg(radius).arg(max)); list.append(QString("QScrollBar::handle:horizontal{background:%1;min-width:%2px;border-radius:%3px;}") .arg(handleNormalColor).arg(min).arg(radius)); list.append(QString("QScrollBar::handle:horizontal:hover{background:%1;}") .arg(handleHoverColor)); list.append(QString("QScrollBar::handle:horizontal:pressed{background:%1;}") .arg(handlePressedColor)); list.append(QString("QScrollBar::add-page:horizontal{background:none;}")); list.append(QString("QScrollBar::sub-page:horizontal{background:none;}")); list.append(QString("QScrollBar::add-line:horizontal{background:none;}")); list.append(QString("QScrollBar::sub-line:horizontal{background:none;}")); //纵向滚动条部分 list.append(QString("QScrollBar:vertical{background:%1;padding:%2px;border-radius:%3px;min-width:%4px;max-width:%4px;}") .arg(bgColor).arg(padding).arg(radius).arg(max)); list.append(QString("QScrollBar::handle:vertical{background:%1;min-height:%2px;border-radius:%3px;}") .arg(handleNormalColor).arg(min).arg(radius)); list.append(QString("QScrollBar::handle:vertical:hover{background:%1;}") .arg(handleHoverColor)); list.append(QString("QScrollBar::handle:vertical:pressed{background:%1;}") .arg(handlePressedColor)); list.append(QString("QScrollBar::add-page:vertical{background:none;}")); list.append(QString("QScrollBar::sub-page:vertical{background:none;}")); list.append(QString("QScrollBar::add-line:vertical{background:none;}")); list.append(QString("QScrollBar::sub-line:vertical{background:none;}")); QString qss = list.join(""); scroll->setStyleSheet(qss); return qss;}
三、效果图
感谢你能够认真阅读完这篇文章,希望小编分享的"Qt如何实现扁平化样式flatui"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
扁平
框架
部分
开发
样式
篇文章
设计
前端
控件
优秀
代表
同时
按钮
语言
越来越
项目
风格
C#
越来
学习
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ups和服务器能一起用吗
学校图书馆数据库资源用不了
互通网络技术有限公司
服务器内存不够
土地利用规划数据库更新技术标准
我的世界服务器公会有什么用
国内十大网络安全事件
中国移动pc服务器收费
在线食堂数据库
基于f框架的软件开发
python金融软件开发
闵行区上门软件开发要求
平板网络安全系数设置
温州信息网络技术服务
新加坡网络安全博士招生
腾讯云服务器山东代理
国家空间网络安全专业
分拣线工控网络安全招标
可查看字段注释的数据库工具
服务器要钱吗
亚信服务器杀毒中标
网络安全事件感悟
联盟端游服务器卡出炸弹人
中国移动pc服务器收费
java高级软件开发就业
免费服务器节点2022
java和软件开发区别
传统网络安全哪家强
斑马网络技术有限公司是什么
实行网络安全等级保护制度的意义