Qt 6: 1

您所在的位置:网站首页 android修改标题栏文字 Qt 6: 1

Qt 6: 1

2023-05-18 23:17| 来源: 网络整理| 查看: 265

文章目录 风格预览使用 调色板样式表代码实现设计模式实现 Qt样式表语法样式规则选择器类型子控件伪状态冲突解决层叠设置QObject属性 盒子模型QSS文件特殊效果窗体不规则窗体透明窗体

风格

使用特定平台的风格

预览

在ui设计界面中,按下列点击,可选择对应的风格预览 在这里插入图片描述

使用

在main函数中加入头文件 QApplication a(argc, argv)后添加: a.setStyle(QStyleFactory::create(“fusion”)); 括号里是想用的风格

对特定部件使用特定风格,调用setStyle方法,参数同上

调色板

Qt的所有部件都包含一个调色板,用于绘制自身,常用setColor()和setBrush() 常用部件的palette()获取调色板,setPalette(调色板)设置 调色板有下三种颜色组:

激活颜色组QPalette::Active:获取键盘焦点的窗口非激激活颜色组QPalette::Inactive:没有获取键盘焦点的窗口失效颜色组QPalette::Disabled:不可用的非窗口部件

setColor有两种: void QPalette::setColor(QPalette::ColorGroup group, QPalette::ColorRole role, const QColor &color)

void QPalette::setColor(QPalette::ColorRole role, const QColor &color)

颜色组为上三种,颜色角色可在Qt文档中查看 例:

//通过QBrush使用图片 QBrush brush(QPixmap(":/img/C:/Users/Pambe/Pictures/ali.jpg")); QPalette palette = this->palette(); palette.setBrush(QPalette::Window, brush); this->setPalette(palette); QPalette palette1 = ui->pushButton->palette(); palette1.setColor(QPalette::ButtonText, Qt::red); //获取和设置部件的palette后还要调用组件的setPalette方法,我也很奇怪 ui->pushButton->setPalette(palette1); ui->spinBox->setDisabled(true); QPalette palette2 = ui->spinBox->palette(); //禁用状态下的spinBox palette2.setColor(QPalette::Disabled, QPalette::Base, Qt::blue); ui->spinBox->setPalette(palette2); 样式表 代码实现

一个自定义部件外观的机制,十分强大。 如果不同级别都设置了样式表,Qt会使用所有有效的样式表,被称为样式表的折叠。 常用setStyleSheet()方法

//设置按钮背景为黄色 ui->pushButton->setStyleSheet("background:yellow"); //对后续所有加入的QSlider的背景颜色都更改为蓝色 setStyleSheet("QSlider{background:blue}");

setStyleSheet()括号里的参数其实是一种类似CSS的语法(选择器,见下章)

设计模式实现

在设计模式中右键,选择Change styleSheet,可在其中输入样式表语法或选择其中提供的功能进行设置 在这里插入图片描述

Qt样式表语法 样式规则

每个样式规则由选择器和声明组成,例: 在这里插入图片描述

Qt样式表中只有类名、对象名、Qt属性名区分大小写。 多个选择器用逗号隔开,多个属性:值用分号隔开,如: QPushButton,QSlide{color:red;background-color:white}

Qt帮助文档“Qt Style Sheets Reference”可查看样式表所支持的所有部件及属性。

选择器类型

https://blog.csdn.net/wasaiheihei/article/details/122538838

这个博主写得全

子控件

多用于复杂的部件修改,如访问某控件的上下按钮,参考

https://blog.csdn.net/Staranywhere/article/details/106652678

伪状态

部件在指定状态下应用修改,如鼠标悬停。伪状态在选择器后用冒号隔开,如 QPushButton:hover{color:white} 也可使用逻辑否(!) QPushButton:!hover{color:red} 即在非悬停状态 多个伪状态可用冒号或逗号隔开,如: QPushButton:hover:checked{color:white} 或QPushButton:hover, QCheckBox:checked{color:white} 可联合子控件使用 QCombox::drop-down:hover{color:white}

冲突解决

当多个规则针对同一部件时,并不像CSS后出现的代码覆盖前面的,而是特殊的选择器优先。 如ID选择器大于一半选择器,有伪状态优先无伪状态。 同特殊性时后出现的覆盖先出现。

层叠

部件最后的效果是部件祖先的样式表合并得到的,当发生冲突式,部件样式表 > 父部件样式表 > 祖先部件样式表

设置QObject属性

任何可设计的Q_PROPERTY都可使用“qproperty-属性名”语法设置样式表,如: QPushButton{qproperty - iconSize : 20px 20px}

盒子模型

在这里插入图片描述 默认间距为0

QSS文件

Qt编写的样式表可保存为.qss文件或利用QFile导入.qss文件作为界面样式

QFile *qssFile = new QFile(":/my.qss", this); qssFile->open(QFile::ReadOnly); QString style = QString(qssFile->readAll()); qApp->setStyleSheet(style); qssFile->close();

实际是读取文件内容,将预先设计的样式利用setStyleSheet()进行修改

特殊效果窗体 不规则窗体

利用mask将目标切割成与图片一致的形状

QPixmap pixmap(":/img/C:/Users/Pambe/Pictures/ali.jpg"); ui->label->resize(pixmap.size()); ui->label->setPixmap(pixmap); ui->label->setMask(pixmap.mask()); 透明窗体

对于非顶级窗体,利用样式表的rgba(255, 255, 255, 100),最后一项为alpha,取值也为0~255,理解为透明度

对于顶级窗体,利用setWindowOpacity()函数,参数为0.0~1.0,设置透明度。缺点是该方法会设置所有窗口/部件的透明度。

setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); 上两个方法可设置只顶级窗口半透明,但标题栏没了,需额外添加。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3