千家信息网

Qt如何实现扁平化样式flatui

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Qt如何实现扁平化样式flatui,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言对于现在做前端开发人员来说,
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 重生之互联网科技帝国 互联网金融 科技 互联网科技集团 齐家互联网科技 安徽鑫晟辉互联网科技 北京禾田雨橡互联网科技 互联网科技的未来发展 国外互联网科技网站 互联网养老 桔豆科技 济南华为互联网科技产业总部基地 华服互联网科技官网 贵州叶脉互联网科技有限公司所属行业 荆州市昕露互联网络科技有限公司 中国互联网公司排名锤子科技 互联网科技和法律行业 艺电能源互联网科技有限公司招聘 玉溪新华互联网科技怎么选 数字科技和互联网金融哪个好 互联网大会出现的黑科技 广州全民伙伴互联网科技有限公司 互联网巨头科技公司 融势互联网科技 央行互联网金融科技公司 中化能源互联网科技招聘 厦门比较好的科技互联网公司 浙江互联网科技研学营 深圳市优智互联网科技有限公司 中和天地互联网科技有限公司 互联网科技实习生岗位 陕西云淼互联网科技公司
0