Qt 6: 1-10 界面外观

风格

使用特定平台的风格

预览

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

使用

在main函数中加入头文件<QStyleFactory>
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);
上两个方法可设置只顶级窗口半透明,但标题栏没了,需额外添加。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值