前言

用Qt实现一个消息提示控件,控件宽度会根据显示的内容多少来动态伸展,控件显示三秒钟过后会自动渐变透明度然后最终消失,这有点类似于Android的Toast控件,都是用于消息短暂提示。

源码

头文件

#include <QWidget>
#include <QLabel>
#include <QPaintEvent>
#include <QTimer>class TLTipsWidget : public QWidget
{Q_OBJECT
public:explicit TLTipsWidget(QWidget *parent = 0);~TLTipsWidget();void setText(const QString & text);
protected:void paintEvent(QPaintEvent *e);void showEvent(QShowEvent *e);
signals:private slots:void onTimerStayOut();void onTimerCloseOut();//渐变后隐藏
private:QLabel* m_pLabel;QTimer * m_pTimer;QTimer * m_pCloseTimer;qreal m_dTransparent;
};

源文件

#include "tltipswidget.h"
#include <QPainter>TLTipsWidget::TLTipsWidget(QWidget *parent) :QWidget(parent),m_pLabel(NULL),m_pTimer(NULL),m_pCloseTimer(NULL),m_dTransparent(1.0)
{this->setFixedHeight(55);m_pLabel = new QLabel(this);m_pLabel->setFixedHeight(55);m_pLabel->move(0,0);m_pLabel->setAlignment(Qt::AlignCenter);m_pLabel->setStyleSheet("color:white");this->hide();this->setWindowFlags(Qt::FramelessWindowHint);this->setAttribute(Qt::WA_TranslucentBackground,true);m_pTimer = new QTimer();m_pTimer->setInterval(3000);m_pCloseTimer = new QTimer();m_pCloseTimer->setInterval(20);connect(m_pTimer,&QTimer::timeout,this,&TLTipsWidget::onTimerStayOut);connect(m_pCloseTimer,&QTimer::timeout,this,&TLTipsWidget::onTimerCloseOut);
}TLTipsWidget::~TLTipsWidget()
{delete m_pTimer;delete m_pCloseTimer;
}void TLTipsWidget::setText(const QString &text){QFontMetrics fm(this->font());int width = fm.width(text) * 1.2;this->setFixedWidth(width);m_pLabel->setFixedWidth(width);this->m_pLabel->setText(text);this->show();m_pTimer->start();
}void TLTipsWidget::paintEvent(QPaintEvent *e)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setPen(Qt::NoPen);painter.setBrush(QColor(0,0,0,180));painter.drawRoundedRect(rect(),5,5);QWidget::paintEvent(e);
}void TLTipsWidget::showEvent(QShowEvent *e)
{QTimer::singleShot(2500,this,SLOT(hide()));this->move(parentWidget()->width() / 2 - this->width()/2,(parentWidget()->height()*(1- (172/1120))) / 2 - this->height() / 2);QWidget::showEvent(e);
}void TLTipsWidget::onTimerStayOut()
{m_pTimer->stop();if(m_pCloseTimer->isActive()){m_pCloseTimer->stop();}m_pCloseTimer->start();
}void TLTipsWidget::onTimerCloseOut()
{m_dTransparent -= 0.01;if(m_dTransparent <= 0.0001){m_pCloseTimer->stop();this->hide();m_pLabel->clear();}else{setWindowOpacity(m_dTransparent);}
}

实现原理其实很简单,通过定时器来控制显示时间,以及动态改变透明度直到变为0后隐藏即可。不再赘述。

Qt QWidget实现消息提示控件TipsWidget相关推荐

  1. Android——消息提示控件

    目录 1.Toast(吐司) 1.自定义Toast布局 2.运用 1.布局 2.MainActivity.java 3.效果展示 4.toast.setGravity()不起作用怎么办呢? 1.解决方 ...

  2. [QT_015]Qt学习之基于条目控件的自定义特性(拖拽+右键菜单+样式)

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 本节介绍基于条目控件的定制特性,首先介绍条目的拖拽,列表控件. ...

  3. [UWP]实现一个轻量级的应用内消息通知控件

    [UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...

  4. 气泡形提示控件grumble.js

    grumble.js 是一个很特别的气泡形状提示控件,最开始是为 Huddle.com 网站开发的, 它没有通常的north/east/south/west的定位限制. 任何一个grumble都可以放 ...

  5. Qt界面开发(各种控件以及图表)

    Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2.QT漂亮界面 源代码链接:点击打开链接 3.音乐播放器界面 源代码链接:点击打开链接 4.六宫格界面 源代码链接:点击 ...

  6. 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider...

    重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider 原文:重新想象 Windows 8 S ...

  7. 解决Android Studio不提示控件的XML属性

    大家好:我国著名数学家华罗庚先生曾经说过:"聪明出于勤奋,天才在于积累."衷心希望各位坚守本心,实现中华民族伟大复兴的中国梦! 一.问题背景 上一篇文章向大家介绍了如何利用WPS使 ...

  8. 为此计算机上所有用户安装此加载项,win7打开特定网站提示“控件无法安装,windows已阻止此软件因为无法验证发行者”怎么办...

    很多用户在运行win7操作系统的时候遇到一种情况,就是打开一些特定的网站或者使用某些网站的功能.比如用户打开工商银行网站时,就会弹出提示"控件无法安装,windows已阻止此软件因为无法验证 ...

  9. win7已经阻止此发行者在您的计算机上运行软件,win7系统打开特定网站提示“控件无法安装,windows已阻止此软件因为无法验证发行者”如何解决...

    在使用win7系统的过程中,难免会遇到各种问题,有win7系统用户要在电脑中打开一些特定网站或者使用某些网站功能的时候,比如打开工商银行网站时,就会弹出提示"控件无法安装,windows已阻 ...

最新文章

  1. 学计算机如何防辐射,长期对电脑怎么防辐射
  2. 自定义字段类型的开发[转]
  3. android 进程间的通信,Android native进程间通信实例-binder结合共享内存
  4. 常见三维文件格式之STL
  5. 三和韓長庚 著 易學原理總論 對讀 021_040
  6. 腾讯赵建春:AI浪潮下的高效运维思考及实践
  7. Linux 服务器为什么被黑
  8. apache 网页301重定向、自定义400/403/404/500错误页面
  9. 中科大2021计算机应用数学期末回忆版
  10. 优化 RTD 温度传感系统:挑战
  11. 交叉验证(Cross Validation)简介
  12. 行业首份社会责任报告诞生,满帮如何写下价值新注脚?
  13. 如何判断电脑已感染“磁碟机”病毒?
  14. STM32中使用MMA7660重力加速度传感器
  15. 【全网最简单】给朋友- 制作,微信公众号推送教程
  16. BGP基本配置和路由聚合
  17. 文档计算机无法分页,word文档总是重新分页 word文档老是分页显示怎么解决
  18. 计算机一级考试B十类理论题,10计算机一级统考理论题.doc
  19. 微信撤回 服务器已删除,微信撤回已经毫无用处,99%都能找回!
  20. numpy.linalg 中的逆矩阵 inv

热门文章

  1. vue工程全局设置ajax的等待动效
  2. 面向对象--内部属性类型
  3. echarts版本折线图
  4. apache phoenix 安装试用
  5. 将不确定变为确定~transactionscope何时提升为分布式事务?
  6. 允许java运行不安全或不可信的应用程序
  7. 弹出键盘windowsoftinputmode属性设置值
  8. 企业应用架构模式 读书笔记
  9. nagios errors
  10. 网站建设PHP中mysql和mysqli的区别