继承QLabel类实现一个类似于toolbutton的可选控件,有选择和未选择两种状态
这里属性取名“checked”,有两种方式
方法一:在设计师里定义
点击加号,选择属性类型,这里两种状态,直接使用 bool 类型即可,属性名 checked
新增的属性如下图
方法二:在代码中定义
class LabelButton : public QLabel { Q_OBJECT Q_PROPERTY(bool checked READ isChecked WRITE setChecked) //属性定义 public: LabelButton(QWidget *parent = Q_NULLPTR); ~LabelButton(); bool isChecked (){ return m_isChecked; } //get方法 void setChecked(bool b){ m_isChecked=b; } //set方法 private: bool m_isChecked; }在qss文件中给两种不同状态设置样式
LabelButton[checked="true"] { background-color:blue; } LabelButton[checked="false"] { background-color:red; }重写鼠标点击事件,修改控件状态
.h文件 protected: void mousePressEvent(QMouseEvent* event); .cpp文件 void LabelButton::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { this->setProperty("checked", !isChecked); this->style()->polish(this); //重新加载样式 isChecked = !isChecked; } }qss不能自动监听属性值的变化,所以需要在属性值改变后,重新加载样式表。
参考文章:
https://blog.csdn.net/u010168781/article/details/102801316