通过QLabel创建类似冒泡方式的提示框(提示框显示位置为父类控件居中位置,具体可根据需要自行修改),鼠标停留提示框界面时查看信息,离开时自动淡化消失的效果;

头文件定义

#ifndef _TTipWidget_H_
#define _TTipWidget_H_ class TTipWidget :public QLabel
{
Q_OBJECT public:
static TTipWidget &Instance();
void SetMesseage(const QString &strMessage, const QPoint *pPoint=nullptr); private:
TTipWidget();
~TTipWidget(); void OnTimer();
void enterEvent(QEvent *);
void leaveEvent(QEvent *); private:
QWidget *mpParent;
QTimer *mpTimer;
bool mbEnter;
int mnTransparent;
}; #endif // _TTipWidget_H_

实例实现

#include "TTipWidget.h"

TTipWidget::TTipWidget()
: mpParent(nullptr)
, mbEnter(false)
, mnTransparent()
{
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setAlignment(Qt::AlignCenter); mpTimer = new QTimer(this);
connect(mpTimer, &QTimer::timeout, this, &TTipWidget::OnTimer);
} TTipWidget::~TTipWidget()
{
deleteLater();
} void TTipWidget::enterEvent(QEvent *)
{
mbEnter = true;
mnTransparent = ;
setStyleSheet(QString("color:white;font:12px \"Microsoft YaHei\";border-radius:5px;background-color:rgba(80, 80, 80, %1);").arg(mnTransparent));
} void TTipWidget::leaveEvent(QEvent *)
{
mbEnter = false;
} void TTipWidget::OnTimer()
{
if (mbEnter)
{
return;
} mnTransparent -= ;
if (mnTransparent > )
{
if (mpParent && parentWidget())
{
QPoint pt((parentWidget()->width() - width()) >> , (parentWidget()->height() - height()) >> );
if (pos() != pt)
{
move(pt);
}
}
setStyleSheet(QString("color:white;font:12px \"Microsoft YaHei\";border-radius:5px;background-color:rgba(80, 80, 80, %1);").arg(mnTransparent));
}
else
{
mpTimer->stop();
setVisible(false);
}
} void TTipWidget::SetMesseage(const QString &strMessage, const QPoint *pPoint)
{
if (strMessage.isEmpty())
{
return;
} QFontMetrics fm1(font());
setFixedSize(fm1.width(strMessage) + , ); mpParent = parentWidget(); if (width() > mpParent->width())
{
setFixedSize(mpParent->width() - , );
setWordWrap(true);
}
else
{
setWordWrap(false);
} setText(strMessage); if (nullptr != mpParent)
{
if (nullptr != pPoint)
{
move(mpParent->mapFromGlobal(*pPoint));
mpParent = nullptr;
}
else
{
move((mpParent->width() - width()) >> , (mpParent->height() - height()) >> );
}
} setVisible(true);
mnTransparent = ; mpTimer->start();
} TTipWidget &TTipWidget::Instance()
{
static TTipWidget tipWidget;
return tipWidget;
}

外部引用

TTipWidget::Instance().setParent(this);   //设置实例的引用者
TTipWidget::Instance().setVisible(false); TTipWidget::Instance().SetMesseage(tr("Disappearing tips!")); //提示信息

最新文章

  1. C代码实现数组
  2. 脑筋急转弯——Google 面试
  3. 初学JAVA 感想
  4. composer快速入门
  5. 笔记本做wifi热点
  6. H5小游戏的坑点小结
  7. ZeroMQ(java)之Router/Dealer模式
  8. 将MyApp.exe和Autorun.lnk添加到NK里,在project.bib文件内加入
  9. [HDOJ5773]The All-purpose Zero(贪心,DP)
  10. Cassandra1.2文档学习(19)—— CQL索引
  11. php设计模式(二):结构模式
  12. The 2014 ACM-ICPC Asia Mudanjiang Regional
  13. mongodb副本集配置
  14. 从QA到工程能效团队
  15. 创建Jenkins构建触发器,代码提交至gitLab即自动触发构建
  16. SQL强化练习(面试与学习必备)
  17. Android RecyclerView 瀑布流滑动到最后自动加载更多
  18. Shell基础知识(三)
  19. css文字链接滑过向上移动1像素
  20. 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理

热门文章

  1. centos7使用cobbler(2.8)批量部署操作系统之二
  2. 【Stack Overflow -- 原创加工、原创整理、生产实战】-- 深度复制
  3. 大数据平台常见异常-zookeeper
  4. MD5加盐 Java加密算法
  5. jsonp的原理和实现
  6. Tkinter开发第一个桌面程序HelloWorld
  7. Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
  8. vue+webpack项目实际工作中需要生成一个配置文件供生产环境使用
  9. 简单介绍Struts2
  10. CSS预编译与PostCSS以及Webpack构建CSS综合方案