【Qt】QLabel之动态阴影边框
效果如下:
实现思路参考了下面的文章:
Qt 之 QPropertyAnimation
该文章是自定义属性alpha,原理类似,代码如下:
//在头文件加入 Q_PROPERTY(int iBorderRadius READ iBorderRadius WRITE setBorderRadius) //自定义属性修改QLable的边框,以达到动画效果 private: int iBorderRadius() const; void setBorderRadius(const int radius); void initLableAnimation();
//cpp int MainWindow::iBorderRadius() const { return m_borderRadius; } void MainWindow::setBorderRadius(const int radius) { m_borderRadius = radius; //下面在自定义属性中修改BlurRadius m_lblSnapImgshadowEffect->setBlurRadius(m_borderRadius); m_lblIdentityImgshadowEffect->setBlurRadius(m_borderRadius); // ui->lblIdentityImg->setGraphicsEffect(m_lblSnapImgshadowEffect); } void MainWindow::initLableAnimation() { //设备图片周围的阴影 m_lblIdentityImgshadowEffect =new QGraphicsDropShadowEffect(this); m_lblIdentityImgshadowEffect->setColor(Qt::darkGreen);//边框颜色 m_lblIdentityImgshadowEffect->setOffset(0,0); m_lblIdentityImgshadowEffect->setBlurRadius(0); //此处初始化为0,下面会由QPropertyAnimation 修改 自定义属性iBorderRadius m_lblSnapImgshadowEffect = new QGraphicsDropShadowEffect(this); m_lblSnapImgshadowEffect->setColor(Qt::red); //边框颜色 m_lblSnapImgshadowEffect->setOffset(0,0); m_lblSnapImgshadowEffect->setBlurRadius(0); //此处初始化为0,下面会由QPropertyAnimation 修改 自定义属性iBorderRadius ui->lblIdentityImg->setGraphicsEffect(m_lblIdentityImgshadowEffect); ui->lblSnapImg->setGraphicsEffect(m_lblSnapImgshadowEffect); //抓拍图片的边框动画特效 m_lblSnapImgAnimation = new QPropertyAnimation(); m_lblSnapImgAnimation->setTargetObject(this); m_lblSnapImgAnimation->setDuration(2000); //完整周期2秒 m_lblSnapImgAnimation->setPropertyName("iBorderRadius"); //下面代码是由状态机自动完成 //0-0.5,完成iBorderRadius从1到30递增; //0.5-1,完成iBorderRadius从30到1递减 m_lblSnapImgAnimation->setKeyValueAt(0,1); m_lblSnapImgAnimation->setKeyValueAt(0.5,30); m_lblSnapImgAnimation->setKeyValueAt(1,1); m_lblSnapImgAnimation->setLoopCount(-1); //身份证照片的边框动画特效 m_lblIdentityImgAnimation = new QPropertyAnimation(); m_lblIdentityImgAnimation->setTargetObject(this); m_lblIdentityImgAnimation->setDuration(2000);//完整周期2秒 m_lblIdentityImgAnimation->setPropertyName("iBorderRadius"); //下面代码是由状态机自动完成 //0-0.5,完成iBorderRadius从1到30递增; //0.5-1,完成iBorderRadius从30到1递减 m_lblIdentityImgAnimation->setKeyValueAt(0,1); m_lblIdentityImgAnimation->setKeyValueAt(0.5,30); m_lblIdentityImgAnimation->setKeyValueAt(1,1); m_lblIdentityImgAnimation->setLoopCount(-1); connect(this, SIGNAL(StartLableAnimation()), m_lblSnapImgAnimation, SLOT(start())); connect(this, SIGNAL(StartLableAnimation()), m_lblIdentityImgAnimation, SLOT(start())); }
只要触发信号,两个QLabel的动画效果就会启动。
emit StartLableAnimation();
代码:
链接: https://pan.baidu.com/s/1X5o4C283lA2tjcGmqS9Mgg 密码: ned3
分类:
Qt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2015-08-21 【转载】malloc内存分配与free内存释放的原理