动态改变样式 即动态属性,如点击按钮可以让按钮的样式改变:从红色->蓝色->绿色
我们来了解一下这个函数:

bool QObject::setProperty(const char *name, const QVariant &value)

这个函数是干什么?
对于一个基于QObject的控件来讲,可以通过setProperty来设置属性

它的参数是什么?
const char *name:即自定义的属性名称,注意不要和控件的默认属性名称相同
const QVariant &value: 为此属性的值

具体的看此链接:QT property属性的应用

它对本文有来说怎么使用呢?
我们的需求:动态改变按钮的样式 ,接下来就会有很大的作用

1.我们需要新建一个类,在ui里放一个pushButton,然后给按钮设置好样式

右键我们的pushButton点击样式表,内容为:
第一行为初始颜色,PropertyTest为我们新建的类名,borderColor为我们需要设置的属性,“=”后的为属性的值,btn为我们pushButton的ObjectName

#btn{border:4px solid blue;}
PropertyTest[borderColor="red"] #btn{border:4px solid red;}
PropertyTest[borderColor="green"] #btn{border:4px solid green;}
PropertyTest[borderColor="blue"] #btn{border:4px solid blue;}

2,声明点击按钮的槽函数

private slots:void changeBorderColor();  //改变属性的颜色
private:int m_iTest;             //点击的次数

3.连接我们的槽函数

connect(ui.btn, &QPushButton::clicked, this, &PropertyTest::changeBorderColor);

4.定义我们的槽函数内容

void PropertyTest::changeBorderColor()
{if (m_iTest % 3 == 0){setProperty("borderColor", "red");}else if (m_iTest % 3 == 1){setProperty("borderColor", "green");}else{setProperty("borderColor", "blue");}//手动更新样式的两种方式 第一种//ui.btn->style()->unpolish(ui.btn);  //清理之前的样式//ui.btn->style()->polish(ui.btn);       //用于添加新的样式//ui.btn->update();//第二种ui.btn->setStyle(QApplication::style());m_iTest++;
}

效果:


第二种方法:
1.同方法一的第一步
2.我们需要添加继承自QObject的类中使用 Q_PROPERTY 宏指令

这个宏是干啥的呢?
看下本例子中:

Q_PROPERTY(QString borderColor READ getBorderColor WRITE setBorderColor)

依据Q_PROPERTY(参数类型 参数名称 READ 获得属性值函数 WRITE 设置属性值函数)
参数类型:QString
参数名称:borderColor
获得属性值函数:getBorderColor
设置属性值函数:setBorderColor

看具体宏链接:Q_PROPERTY介绍
3.定义我们在宏中写的读写的成员函数 和 保存设置的颜色

public:void setBorderColor(const QString& strBorderColor) { m_strBorderColor = strBorderColor; }QString getBorderColor() { return m_strBorderColor; }
private:QString m_strBorderColor;int m_iTest;

4.同上一个方法的第三步
5.定义我们的槽函数

void PropertyTest::changeBorderColor()
{if (m_iTest % 3 == 0){setBorderColor("red");}else if (m_iTest % 3 == 1){setBorderColor("green");}else{setBorderColor("blue");}//手动更新样式//ui.btn->style()->unpolish(ui.btn);//ui.btn->style()->polish(ui.btn);//ui.btn->update();ui.btn->setStyle(QApplication::style());m_iTest++;
}

效果和第一种一样

完整代码:
PropertyTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_PropertyTest.h"
#include <QStyle>
#include <QDebug>
class PropertyTest : public QWidget
{Q_OBJECT//Q_PROPERTY(QString borderColor READ getBorderColor WRITE setBorderColor)
public:PropertyTest(QWidget *parent = Q_NULLPTR);~PropertyTest();//void setBorderColor(const QString& strBorderColor) { m_strBorderColor = strBorderColor; }//QString getBorderColor() { return m_strBorderColor; }
private slots:void changeBorderColor();
private:Ui::PropertyTestClass ui;QString m_strBorderColor;int m_iTest;
};

PropertyTest.cpp

#include "PropertyTest.h"PropertyTest::PropertyTest(QWidget *parent): QWidget(parent), m_iTest(0)
{ui.setupUi(this);connect(ui.btn, &QPushButton::clicked, this, &PropertyTest::changeBorderColor);
}PropertyTest::~PropertyTest()
{}
void PropertyTest::changeBorderColor()
{if (m_iTest % 3 == 0){setProperty("borderColor", "red");//setBorderColor("red");}else if (m_iTest % 3 == 1){setProperty("borderColor", "green");//setBorderColor("green");}else{setProperty("borderColor", "blue");//setBorderColor("blue");}//手动更新样式//ui.btn->style()->unpolish(ui.btn);//ui.btn->style()->polish(ui.btn);//ui.btn->update();ui.btn->setStyle(QApplication::style());m_iTest++;
}

参考博客:
Qt之动态属性unpolish()和polish()
QT property属性的应用
Q_PROPERTY介绍

QT笔记——Qt动态属性 之 unpolish() 和 polish()相关推荐

  1. Qt笔记-Qt获取百度下拉推荐词

    目录 基本概念 代码与实例 基本概念 这里就是百度搜索的这个功能 在Web应用中,这种主要是通过jsonp原理实现的,但在桌面应用程序就更简单了,只要发送get请求,不填写回调函数,即可在http封包 ...

  2. QT笔记——QT支持Https

    我们想要实现支持https的请求,在一开始,不做任何操作下,是不支持https的请求的 我的环境:vs2019 + qt 5.12.2 其他版本可能不清楚 什么是https:是由SSL + HTTP协 ...

  3. QT笔记--QT内类的层次关系,以及控件从属关系

      QT窗口界面使用的类层次如下(只包含了直接使用部分)   界面上每一个创建的控件,都是一个控件类的对象,定义在头文件ui_mainwindoow.h的类UI_MainWindow中,并且其中的成员 ...

  4. Qt笔记——Qt初探、PyQt5和Qt5

    半年前接触了pyqt,开发了一个无人机环境监测的软件,感觉非常有意思,这半年受困于学业和杂事繁忙, 没有继续进阶:虽然现在还是有烦事缠身,但是下决心重新复习C++,认真学习Qt,目标希望能在Qt上走得 ...

  5. Qt笔记-Qt中Json存二进制文件并读取文件(QJsonObject、QJsonArray、QJsonDocument的使用)

    程序运行截图如下: 文件如下: 源码如下: #include <QCoreApplication> #include <QJsonDocument> #include < ...

  6. c++ qt工作量和移动端相比_学习笔记 --- QT

    0.前序 别问,问就是选修... 那毕竟3dMax动画那边结课了,我怎么就不能再发一篇笔记(极其嚣张) QT其实会去好好学的,虽然最近为了选修结课又得恶补一波 不过以后给策划造编辑器是要用的,这篇笔记 ...

  7. Qt Creator指定动态属性

    Qt Creator指定动态属性 指定动态属性 指定动态属性 每个预定义的QML类型都有一组预定义的属性,您可以为其指定值.您可以添加特定类型不存在的自定义属性.您将属性绑定到动态表达式,以定义可以被 ...

  8. Qt文档阅读笔记-Qt对象模型及deleteLater()杂记

    最近主要在撸官方的自学包.在此作下简短的笔记: Qt对象模型 Qt包含的1500个类可以分为2类 1. identify types: 2. value types: identify types: ...

  9. 05黑马QT笔记之自定义槽函数

    05黑马QT笔记之自定义槽函数 1 自定义槽函数其实不难,没什么好说的,注意以下几点便可. 自定义参函数注意事项(Qt5): * 1)自定义槽函数可以是类成员函数(用得最多).全局普通函数.静态函数. ...

  10. 02黑马QT笔记之完全手写Hello World

    02黑马QT笔记之完全手写Hello World 1 步骤: 1 新建项目. 2 选择其他项目->空项目. 3 在空项目中添加QT +=widgets //代表使用窗口基类. 4 右击项目名字- ...

最新文章

  1. 1.FPGA开发软件安装——Vivado
  2. Spring Cloud【Finchley】-10Hystrix监控
  3. 机器学习中常见的希腊字母
  4. vc 6.0 显示文件全路径_Linux常用命令大全(非常全!!!)
  5. 百度网站打不开了,百度被黑了?最新证实:百度遭黑客劫持,手段类似于12月被劫持的twitter(截图)...
  6. 对话实录 | 看华为云如何使能AI计算行业创新
  7. 2017.9.10 连续攻击游戏 思考记录
  8. new image()
  9. JSP 的错误调试方法
  10. 2018-05-04 http入门
  11. 使用PDF Converter OCR for Mac如何区分扫描的PDF和普通文件?
  12. 1.2 JAVA多线程实现
  13. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验00 熟悉开发环境(2021级)
  14. 素数筛法详解-列出1-n中的素数
  15. 地球上20张最惊人照片!不看将后悔一辈子
  16. 作为面试官,我是如何甄别应聘者的包装程度
  17. 绘制自己的人际关系图_总算懂了如何画人际关系图
  18. 拼图android系统程序,2021手机照片拼图软件
  19. (附超声射频数据)matlab实现b超原始信号数据生成图像
  20. Leaflet 可视化--风场、海浪、洋流、气压、温度等

热门文章

  1. pgsql timestamp without time zone > character varying解决方案
  2. 乐嘉老师色彩性格测试完全版
  3. 遮羞布被撕,业界反思5G的冒进,运营商重视挖掘现有5G网络的潜力
  4. PL0编译器分析与语法扩展
  5. 路由器自动获取ip失败
  6. 【直播预告】「甦:知识蓄力2020」编辑讲书智慧接力行动
  7. 计算机思维是运用计算机科学的什么,计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列计算机的思维活动。...
  8. html5 canvas画彩虹,HTML5 Canvas彩虹连接点动画
  9. POJ 1392 Ouroboros Snake 欧拉回路
  10. 淘宝抢券python代码,能够对实时抢券和清空购物车。