Qt学习笔记11:自定义控件增加属性并通过qss设置样式
程序员文章站
2022-05-29 18:16:01
...
继承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不能自动监听属性值的变化,所以需要在属性值改变后,重新加载样式表。
参考文章:
上一篇: 2013年展望:大数据发展十大趋势分析
下一篇: Mybatis核心配置文件