本文共 1556 字,大约阅读时间需要 5 分钟。
例如在播放器中播放按钮,由“播放”状态切换成“暂停”状态后,响应的图标要跟着状态切换。
使用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");
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); }}
style()->unpolish(m_btnPlayPause); style()->polish(m_btnPlayPause);
Q_PROPERTY(bool Pause READ isPause WRITE setPause)bool m_isPause;bool isPause(){ return m_isPause; }void setPause(bool b){ m_isPause=b; }
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/