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

继承QLabel类实现一个类似于toolbutton的可选控件,有选择和未选择两种状态

 

第一步:首先定义属性

这里属性取名“checked”,有两种方式

方法一:在设计师里定义

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

点击加号,选择属性类型,这里两种状态,直接使用 bool 类型即可,属性名 checked 

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

新增的属性如下图

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

方法二:在代码中定义

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不能自动监听属性值的变化,所以需要在属性值改变后,重新加载样式表。

 

Qt学习笔记11:自定义控件增加属性并通过qss设置样式_第4张图片                             Qt学习笔记11:自定义控件增加属性并通过qss设置样式_第5张图片

 

 

 

 

参考文章:

https://blog.csdn.net/u010168781/article/details/102801316

你可能感兴趣的:(自定义控件,添加属性,Qt)