使用【setProperty + 样式表】实现对QWidget的动态样式加载
文章目录
一、背景
 QObject的setProperty ()函数功能比较好用。本文总结几点在实际开发中常用的场景:
 (1)定制单个控件的样式。
 (2)实现页面换肤。
 (3)向部件传递动态参数(可以修改、删除)。
二、定制单个控件的样式
 当在QtCreator下拖出多个相同类型的控件时,其名称是软件生成的(除非自己修改)。当把样式表文件放在一个单独的文件中进行加载时,这时候,就可以使用setProperty ()来增加控件对象属性。然后,在样式表文件中,设置对应的属性,即可定制某个相同类型的控件样式了。

 如上图所示,创建了两个QWidget,三个QPushButton。在样式表文件中将使用如下代码定制分别定制这两个QWidget:
QWidget[name="left"]{
    border:1px solid #242424;
    border-radius:0px;
    background:#242424;
}
QWidget[name="top"]{
    border:1px solid #242424;
    border-radius:0px;
    background:#444444;
}
 然后,使用setProperty ()函数添加对象属性:
ui->widget->setProperty("name","top");
ui->widget_2->setProperty("name","left");
 在使用qApp->setStyleSheet()设置样式表文件,即可。
 生成效果图如下:
 
三、实现页面换肤。
 页面换肤方法不止一种,本文描述使用setProperty()函数来实现(注:可能比单独加载样式表文件要复杂些,可以当做一种思路吧,哈哈)
 【核心思路】
 在样式表中创建多个样式,然后当更换皮肤信号发起后,重新使用setProperty()设置对应样式表标记下的部件,然后再重新加载样式表文件即可。
 这里以绿色按钮为例:
void MyWidget::on_pushButton_clicked()
{
    ui->widget->setProperty("color","top_green");
	//加载样式表文件
    loadStyleSheet();
}
 样式表文件:
QWidget[color="top_green"]{
    border:1px solid #242424;
    border-radius:5px;
    background:#019858;
}
 【效果】:
 










