欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-29 18:16:01
...

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

 

第一步:首先定义属性

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

方法一:在设计师里定义

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

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

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

新增的属性如下图

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

方法二:在代码中定义

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设置样式                             Qt学习笔记11:自定义控件增加属性并通过qss设置样式

 

 

 

 

参考文章:

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