Qt学习笔记11:自定义控件增加属性并通过qss设置样式

it2025-03-23  3

继承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

最新回复(0)