QT QSS,QML 样式学习
QT QSS,QML 样式学习
简介
通过QT的QSS和QML定制QT的样式
参考链接
https://www.jianshu.com/p/2c7db2f6c458
https://www.cnblogs.com/bclshuai/p/9809679.html 有很多方法
使用方法
- 在Qt Designer中设置stylesheet
- 在代码中调用控制的stylesheet()接口来设置样式
- 将QSS内容保存到文件中,通过代码读取该文件内容。
void MainWindow::load_style_sheet(const QString &fileName)
{
QFile file(fileName);
if(file.open(QFile::ReadOnly)) {
qApp->setStyleSheet(file.readAll());
file.close();
}
}
- 使用命令行参数"-stylesheet"来指定要加载的QSS文件
./QtDemo -stylesheet test.qss
简单预览
在qtCreater里面使用Ctrl+R来预览
关键css
border-image:url(); // 设置背景图片
QMenu{}; // 作为父类设置
QMenu::item; // 对每一个元素进行设置
QMenu::item:selected; // 元素选中的样式设置
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 rgb(45,133,207),
stop: 1.0 rgb(125,195,250));// x 坐标不变y坐标变化,颜色从0的颜色渐变到1的颜色
QMenu::item:disabled; // 元素设定为不能使用的颜色
QScrollBar; // 滑动条
QScrollBar:horizontal; // 水平滑动条
QScrollBar::handle:horizontal;// 设定滑块
QScrollBar::add-line:horizontal; // 下箭头的设定
subcontrol-position: right; // css没有的控制规范 可以对空间中的元素进行控制
subcontrol-origin: margin;
QScrollBar::sub-line:horizontal; // 上箭头的设定 奇怪
QScrollBar::right-arrow:horizontal, QScrollBar::left-arrow:horizontal;// 箭头
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal; // 滑块未划过的区域 和 滑块划过的区域
QScrollBar:vertical; // 垂直滑动条
QScrollBar::handle:vertical;
QScrollBar::add-line:vertical;QScrollBar::sub-line:vertical;
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical;
QTabBar::tab;// 书签分页器
QTabWidget::pane;// 玻璃片应该就是每个分页的设置
QTabBar::tab:last; // 最有一个tab的设置
border-top-right-radius: 3px;// 就设置上和右的边框宽度
QTabBar::tab:first:!selected; // 未选中的标签
QTabBar::tab:!selected;// 未选中的标签
QTabBar::tab:selected; // 选中的标签
QTabBar::tab:!selected:hover; // 没选中的标签然后鼠标浮现在其上方的样式
QListWidget::Item; // 列表中的每个元素
QListWidget::Item:hover; // 列表中的元素鼠标浮在上方
QListWidget::Item:selected; // 元素选中的样式
QLineEdit; // 行编辑器
QLineEdit:focus; // 获得焦点
QPushButton; // 按钮的样式
QPushButton:hover; // --
QPushButton:pressed; // --
QTextEdit;
QTextEdit:hover;
QTextEdit:focus;
QComboBox; // 组合框
QComboBox::drop-down; // 组合框右边的按钮
QComboBox QAbstractItemView; // QAbstractItemView; 对类似下拉框的操作
QDialog; // 对话框的样式
各种效果的实现
设置边框的大小
不知道为什么设置为
width:xxx;
height:xxx; 起不了效果
采用
min-width:612px;
max-width:612px;
min-height:680px;
max-height:680px;
设置边框边角的弧度
border-radius: 12px;
当然你可以分别设置其他方向的弧度例如
border-top-left-radius:2em;
设置背景图片
可以设置为资源文件夹qrc里面的东西
background:url(':/clothTexture/Resources/83.png');
只设置下边框
border: none;
border-bottom: 2px solid #999999;
设置label显示密码形式
lineedit-password-character: 1000;
其中代码设置
ui->password->setEchoMode(QLineEdit::Password);
设置checkbox的勾选框颜色
QCheckBox::indicator{
width: 24px;
height: 24px;
border: 1px solid #AC9472;
}
设置checkbox勾选后展示的背景图片
QCheckBox::indicator:checked {
image: url(:/clothTexture/Resources/68.png);
border: 1px solid #AC9472;
}
menubar的定制没有实现
设置字体
因为 PingFang-SC 字体要自己下载,没有在QSS里面找到函数接口,写代码实现
ui->setupUi(this);
QFontDatabase fontDatabase;
int result = fontDatabase.addApplicationFont("D:/code/clothTexture/clothTexture/Resources/PingFang-SC-Regular.ttf");
QString stringFont = QFontDatabase::applicationFontFamilies(result).at(0);
QFont font(stringFont);
//QGuiApplication::setFont(font);
ui->XXX->setFont(font);
设置没有app标头的效果

setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
setAttribute(Qt::WA_TranslucentBackground);
ui->setupUi(this);
展现出dialog的边角弧度
将视觉组件用Frame包裹,然后设定Frame的显示效果。
TIPS
- 对象的objectName就是QSS中的id
menubar
menubar 的效果一直做不出来打算尝试更新QT到最新版本 5.15 尝试学习qml
qml
link:
https://wiki.qt.io/QtDesignStudio
https://doc.qt.io/qt-5/qmlapplications.html
https://doc.qt.io/qt-5/qtdoc-tutorials-alarms-example.html
Qt Quick & qml
https://blog.csdn.net/qq_22122811/article/details/78163754 (CSDN博客讲的很详细)
使用QML 和C++ 混合编程 https://blog.csdn.net/foruok/article/details/32698603
简单总结
QTCSS 不是特别难,但是,不想前端那样所见即所得,如果在virtual studio中进行样式更改,每次更改需要重新编译运行才能改到新的样式。在QT Designer里面可以简单看到预览样式。
后续的修改,可能qt widget不能能够设定为很完美的效果。最新的qt开发者协会推荐使用qml来实现定制化。也简单查看了网易云音乐和迅雷的产品架构。
网易云音乐PC版本采用的是
云音乐和钉钉可以确定是CEF3框架+html UI,说的通俗一点就是包装了一个浏览器,里面显示的还是html元素,网易很多应用这方面做的比较成熟了,把CEF3框架(开源的)拿来定制的比较深,一般用户几乎看不出他们用的PC端实际上还是类Web应用;微信新版不知道,之前的应该还是传统的Direct UI应用。(利益相关,chromium内核浏览器开发。)
作者:balloon
链接:https://www.zhihu.com/question/50128701/answer/139653191
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
迅雷采用的是
之前扒过飞书的源码,从代码设计架构层面里里外外学习一把,飞书还是挺“大方”的,源码在客户端和网页端都一览无余,不过好像新版本已经看不到了。相关的文章由于在内网技术论坛发过了不便于再发出来(泄露内部资料会被查水表的),因此这次周末抽时间换一个鸟窝来掏一掏。一不小心发现迅雷的客户端竟然也是基于 Electron 开发的,那代码就好扒拉了。(先吐槽一下这新版本的某lei为什么要抄钉钉的界面,这些年某lei都不知道自己要干什么了,每个版本都招人嫌)。
作者:终端研发部
链接:https://zhuanlan.zhihu.com/p/337048581
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
QT QSS,QML 样式学习的更多相关文章
- Qt QSS图片样式切割,三种状态normal,hover,pressed
要切割的样式图片如下: pix_Button->setStyleSheet("QPushButton{ border-image:url(:/image/MyButtonimage/m ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
- qml基础学习 基础概念
一.概括 学习qt已有2年多的时间,从qt4.7开始使用直到现在正在使用的qt5.6,基本都在windows机器上做开发.最近有意向看了下qt的qml部分,觉着还是挺不错的,毕竟可以做嵌入式移动端产品 ...
- QT qss资源文件与代码分离
在最近的Qt相关项目开发中,有不同客户提出更改logo图片的需求,每次更换一张图片需要重新添加到.qrc资源文件,并重新编译源代码生产可执行文件,操作效率极低,频繁修改源代码也 容易引起其他不可靠问题 ...
- Qt Creator 源码学习笔记04,多插件实现原理分析
阅读本文大概需要 8 分钟 插件听上去很高大上,实际上就是一个个动态库,动态库在不同平台下后缀名不一样,比如在 Windows下以.dll结尾,Linux 下以.so结尾 开发插件其实就是开发一个动态 ...
- qml基础学习 Canvas画笔
一.画布元素 自qt4.7发布qml以来,qml也在一直不断的完善中,在qt4时代使用qml时如果需要异形图,那我们只能让设计师来切图,这样的感觉是很不爽的,总感觉开发没有那么犀利.但是到了qt5这一 ...
- qml基础学习 模型视图(一)
一.理解qml模型和视图 qt的发展是迅速的,虽然在每一个release版本中或多或少都有bug,但是作为一个庞大的gui库,no,应该说是一个开发框架开说,qt已经算是做的相当好.qml部分是qt4 ...
- (转) silverlight 样式学习
原文地址:http://www.cnblogs.com/Joetao/articles/2074727.html <UserControl x:Class="StyleDemo.Mai ...
- QT 设计师使用样式表添加背景
QT create中样式表可以用来设置背景图.背景颜色.字体大小格式颜色等 1.添加背景图的话需要先添加资源文件 右击项目文件选择添加新文件,再选择QT资源文件(QT resource file)然后 ...
- Qt Installer Framework的学习(三)
Qt Installer Framework的学习(三) Qt Installer Framework的样例中.通常是这种:config目录一般放了一个config.xml文件,包括的是安装配置xml ...
随机推荐
- Asp.net core基础(一)Entity FrameworkCore的增删查改
一.EntityFramework Core的介绍 EntityFramework Core是.net core中的ORM(object relational mapping[对象关系映射])框架,它 ...
- centos停服,迁移centos7.3系统到新搭建的openEuler
背景 最近在做的事,简单来讲,就是一套系统差不多有10多台虚拟机,都是centos系统,版本主要是7.3.7.6.7.9,现在centos停止维护了,转为了centos stream,而centos ...
- 还有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案
与上一篇区别在于,详情里面的模板通常是通用的,被定义在样式文件中,被重复使用,因此无法为其添加后台代码,如果能添加后台代码,请翻阅第一篇:所以需要用到命令的方式来辅助事件的抛出,当然还可以利用第三方库 ...
- PHP实现文件上传下载实例详细讲解
一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添 ...
- SaltStack 远程命令执行中文乱码问题
问题 我在一台服务器上写了一个简单的 Python 脚本 haha.py,内容如下: [root@localhost ~]# cat haha.py print("你好") 当我在 ...
- Linux操作系统(中)
上一篇分享了一些Linux操作系统最基本的一些命令和基础知识,下面,要分享的还是Linux操作系统的一些内容,因为在做网安这方面,Linux会经常用到而且也很重要,好了,废话不多说,要开始了. 在Li ...
- P1514 [NOIP 2010 提高组] 引水入城 题解
题意:P1514 [NOIP 2010 提高组] 引水入城有点复杂,自己看吧. 思路 这里提供一个好像没见过的纯 DP 做法,不需要神秘的证明以及任何脑子,直接顺着思路做即可. 首先判断正确性就是从第 ...
- WPF中Resx文件中添加Byte[]
参考:https://learn.microsoft.com/zh-tw/dotnet/api/system.resources.resxresourcewriter.generate?view=wi ...
- codeup之特殊乘法
Description 写个算法,对2个小于1000000000的输入,求结果.特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35 Input 两个小于1000000000 ...
- eclipse从安装到配置Tomcat及运行helloworld
eclipse安装 0.下载 官方地址https://www.eclipse.org/downloads/packages/ 下载那个版本大家参见下图自行取舍叭 1.安装 解压缩 推荐的解压工具7-z ...