Qt
大约 4 分钟
Qt
目录
.qss 样式文件 & 样式
qss代码
- qss与css
- qss文件:全称
Qt Style Sheets
,简写qss
,翻译qt样式表
- 类比css:全称
Cascading Style Sheets
,简写css
,翻译层叠样式表
- qss是一种从HTML CSS(层叠样式表)获得灵感的机制,两者相似又略有不同
- qss文件:全称
使用
片段qss
简概
- 推荐:易于使用
- 与css接近,功能强大且减少学习成本
使用流程
可以通过
setStyleSheets
代码直接设置qssQPushButton* myPushButton; myPushButton->setStyleSheet("* { color: blue }"); myPushButton->setStyleSheet("color: blue");
设置样式
QLineEdit { /*选择器*/ background-color:yellow; }
指定样式
qApp->setStyleSheet("QLineEdit{background-color:yellow;}"); /* setStyleSheet(const QString &styleSheet); */ /* 可以为整个应用程序设置,也可以为单独一个控件设置 */
常用属性
常用属性
color background-color width height spacing /* 字距 */ :hover :checked :!checked padding
.qss文件
添加方法
.qss样式文件不可用直接添加,像jpg、png等资源文件一样,需要添加到.qrc资源文件当中
使用
举例
/** 加载样式*/
void MainWindow::style(){
QFile file(":/Assets/style.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
qApp->setStyleSheet(styleSheet);
file.close();
}
qss高级
qss中使用qrc资源
border-image: url(:/img/check_orange.png);
高级用法
多个一起设置(同CSS)
QCheckBox, QComboBox, QLineEdit, QListView, QRadioButton, QSpinBox{
color: #050505;
background-color:yellow;
}
样式表选择器(选择器,与CSS略有不同)
选择器 | 实例 | 可以匹配的窗口部件 |
---|---|---|
全局对象 | * | 任意窗口部件 |
类型 | QDial | 给定类的实例,包括子类 |
类 | .QDial | 给定类的实例,不包括子类(而不是class) |
标识 | QDial#ageDial | 给定对象名称的窗口部件(而不是id) |
Qt属性 | QDial[y="0"] | 为某些属性赋值的窗口部件 |
子对象 | QFrame > QDial | 给定窗口部件的 直接子窗口部件 |
子孙对象 | QFrame QDial | 给定窗口部件的 子孙窗口部件 |
伪类选择器(同CSS,窗口部件中一些可以访问样式表的状态)
状态 | 说明 |
---|---|
:disabled | 禁用窗口部件 |
:enabled | 启用窗口部件 |
:focus | 窗口部件有输入焦点 |
:hover | 鼠标在窗口部件上悬停 |
:pressed | 鼠标按键单击窗口部件 |
:checked | 按钮已被选用 |
:unchecked | 按钮未被选用 |
indeterminate | 按钮被部分选中 |
:open | 窗口部件位于打开或扩展状态 |
:closed | 窗口部件位于关闭或销毁状态 |
:on | 窗口部件的状态是 on |
:off | 窗口部件的状态是 off |
自定义辅助控制器(常见的)
辅助控制器 | 说明 |
---|---|
::indicator | 复选框、单选框、可选菜单栏、可选群组框 的指示器 |
::menu-indicator | 按钮 的菜单指示器 |
::item | 菜单、菜单栏、状态栏项 -- |
::up-button | 微调框、滚动条 的向上按钮 |
::down-button | 微调框、滚动条 的向下按钮 |
::up-arrow | 微调框、滚动条、标题视图 的向上箭头 |
::down-arrow | 微调框、滚动条、标题视图、组合框 的向下箭头 |
::drop-down | 组合框 的下拉箭头 |
::title | 群组框 的标题 |
多种颜色定义方式(同CSS)
QLineEidt {
color: #050505; /* 16进制 */
color: rgb(0,88,152); /* RGB */
color: rgba(95%, 80%, 9%, 50%); /* RGBA */
color:palette(Base); /* 调色板 */
background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1, /* 线性渐变 */
stop:0 white, stop:0.4 gray, stop:1 green);
/**三种渐变类型
* qlineargradient() 线性渐变
* qradialgradient() 辐射渐变
* qconicalgradient() 圆锥渐变
*/
}
实战 —— Candy风格
直译是 “糖果风格”,具体特征应该是大圆角、扁平或上下渐变背景
示例:略
其他样式方法
三种自定义外观方法
有三种方法可以重新定义Qt内置窗口部件的外观
子类化个别窗口部件类
- 并且重新实现它的绘制和鼠标事件处理器
子类化QStyle、或者一个预定义的风格
- 例如QWindowSytle(Qt5不再支持QWindowsStyle、QWindowsXPStyle、QWindowsVistaStyle)
- 这种方法很好用,Qt本身也是用这种方法为它所支持的不同平台提供基于平台的外观
Qt样式表(从Qt4.2开始)
- 这是一种从HTML CSS(层叠样式表)获得灵感的机制
下面的示例中会展示两种自定义风格
- Candy风格。它通过样式表定义
- Bronze风格。它通过QStyle的子类实现
子类化QStyle
比较起上一种方法,这种方法挺繁琐的......
但如果是使用QStylePlugin风格化插件的话,对应的是QStyle这种自定义样式方式
简概
简概
- QStyle提供了一种包装应用程序外观的方法,这些类为Qt运行的平台和桌面系统实现了外观
Qt内置样式的继承树
补充
灰色为Qt5不再支持。即Qt5不再支持QWindowsStyle、QWindowsXPStyle、QWindowsVistaStyle
为此,可以从QProxyStyle派生出所需风格
使用流程
一个举例(捋清窗口部件和样式之间的关系)
void MyPushButton:paintEvent(QPaintEvent * /*event*/) // 绘图事件
{
QPainter painter(this); // 绘图类
QStyleOptionButton option; // QStyleOption
option.initFrom(this);
if(isFlat())
option.features |= QStyleOptionButton::Flat;
option.text = text();
style()->drawControl(QStyle::CE_PushButton, &option, &painter, this);// drawControl()函数被各种QStyle子类重新实现
}
定义QStyle类
class BronzeStyle: public QWindowsStyle
{
Q_OBJECT
public:
// ...
public slots:
// ...
private:
// ...
}
使用QStyle类