博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Qt】qss样式表之:自定义属性实现动态切换样式
阅读量:4263 次
发布时间:2019-05-26

本文共 1556 字,大约阅读时间需要 5 分钟。

1、问题描述

例如在播放器中播放按钮,由“播放”状态切换成“暂停”状态后,响应的图标要跟着状态切换。

在这里插入图片描述
在这里插入图片描述

2、解决方法

使用qss样式表中的属性功能,自定义一个属性,当按钮动作时,改变它的属性值。

在qss中分别对不同的属性值设置 样式。
但是qss不能自动监听属性值的变化,需要在属性值改变后,重新加载样式表。

MyWidget[Pause="false"]  QPushButton#BtnPlayOrPause{
qproperty-icon: url(:/images/btnPlay.png);}MyWidget[Pause="true"] QPushButton#BtnPlayOrPause{
qproperty-icon: url(:/images/btnPause.png);}

BtnPlayOrPause是设置按钮的对象名

m_btnPlayOrPause->setObjectName("BtnPlayOrPause");
1> 使用setStyleSheet(const QString& styleSheet);
void _setStyleSheet() {
static QString style = QString(); if (style.isEmpty()){
QFile file(":/qss/test.qss"); if(file.open(QFile::ReadOnly)) {
qDebug() << "qss file open ok!"; style = QString::fromLatin1(file.readAll()); m_btnPlayOrPause->setStyleSheet(style); file.close(); } else {
qCritical() << "qss file open err!"; } } else {
m_btnPlayOrPause->setStyleSheet(style); }}
2> 使用 QStyle::unpolish(QWidget *widget)及polish(推荐)
style()->unpolish(m_btnPlayPause);	style()->polish(m_btnPlayPause);
3、结合状态机自动控制属性
1>属性定义:
Q_PROPERTY(bool Pause READ isPause WRITE setPause)bool m_isPause;bool isPause(){
return m_isPause; }void setPause(bool b){
m_isPause=b; }
2>通过状态机自动切换属性
QState *stateStop = new QState();stateStop->assignProperty(this, "Pause", false);	// false 表示停止时,显示播放图标QState *statePlay = new QState();statePlay->assignProperty(this, "Pause", true);		// true 表示播放时,显示暂停图标statePlay->addTransition(m_btnPlayOrPause, &QPushButton::clicked, statePause);statePause->addTransition(m_btnPlayOrPause, &QPushButton::clicked, statePlay);

转载地址:http://sbmei.baihongyu.com/

你可能感兴趣的文章
linux网络协议栈(六)传输层 (3)UDP协议 5)传输层框架小节
查看>>
linux的线程(posix thread)
查看>>
多路复用之epoll
查看>>
ET模式下epoll编程需要注意的问题
查看>>
linux的信号(signal)
查看>>
Nagle算法与TCP_NODELAY和TCP_CORK
查看>>
netstat常用命令
查看>>
linux内核TCP相关参数解释
查看>>
HTTP协议的详解
查看>>
HTTP快速入门
查看>>
网络编程常见问题
查看>>
lua的正则表达式之模式匹配(转)
查看>>
c++的map总结
查看>>
boost多线程库之准备动作
查看>>
gcc和boost的升级步骤(非root权限)
查看>>
自己编写Python连接MySQL的支持
查看>>
掰开揉碎机器学习系列-决策树(1)-ID3决策树
查看>>
python的引用和浅拷贝和p深拷贝
查看>>
掰开揉碎机器学习系列-决策树(2)-CART决策树
查看>>
python2.7 安装multiprocessing的正确姿势
查看>>