通过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!")); //提示信息

Qt实现冒泡提示框的更多相关文章

  1. Qt之等待提示框(QMovie)

    简述 关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系. 关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的. ...

  2. Qt之等待提示框(QTimer)

    简述 上节讲述了关于QPropertyAnimation实现等待提示框的显示,本节我们使用另外一种方案来实现-使用定时器QTimer,通过设置超时时间定时更新图标达到旋转效果. 简述 效果 资源 源码 ...

  3. Qt之等待提示框(QPropertyAnimation)

    简述 之前分享过QLabel可以通过QMovie播放gif图片,可以实现等待提示框,今天主要使用动画QPropertyAnimation来进行实现! 数据加载的时候,往往都需要后台线程进行数据请求,而 ...

  4. 纯CSS制作冒泡提示框

    来源:http://www.ido321.com/1214.html 前两天翻译了一篇文章,关于利用css的border属性制作基本图形:http://www.ido321.com/1200.html ...

  5. qt之透明提示框(模拟qq) (非常漂亮)

    Qt实现类似QQ的登录失败的提示框,主要涉及窗口透明并添加关闭按钮,以及图标和信息的显示等. 直接上代码: #include "error_widget.h" ErrorWidge ...

  6. Qt之透明提示框

    简述 经常使用企鹅的小伙伴一定对登录失败的提示框很熟悉,主要涉及窗口透明并添加图标.提示信息.关闭按钮的显示等. 我们可以利用QWidget创建一个提示框,然后通过样式设置我们想要的效果. 简述 效果 ...

  7. Qt之等待提示框三(QLabel进行多图片切换)

    之前分享过的等待提示框有用QMovie播放gif图片实现的,也有纯代码实现的,今天再次分享另一种实现方式,如题目所示:QLabel进行图片的切换!     进行用户登录的时候,往往都需要后台线程进行用 ...

  8. css实现带边框的冒泡提示框

    需求是实现这种效果, 因为内容是动态的,使用图片不是很好: 原因: 如果内容确定只是一行,可以效果图裁剪3部分,分别是两侧和中间部分,然后用backgroud插入三张图片,但是要是内容是2行就不好处理 ...

  9. Qt之QProgressIndicator(等待提示框)

    简述 很早以前在网上看到一个纯代码实现的旋转动画感觉效果很不错,分享给大家.不得不说,条条大道通罗马,我们需要更多地创造... 详见:QProgressIndicator 简述 效果 源码 使用 更多 ...

随机推荐

  1. [高并发]EntityFramework之高性能扩展

    目录 简介 读写分离 指定字段更新 事务 Entity 简介 本EF扩展插件将持续更新:开源,敏捷,高性能.(由于EF Core暂未提供方便的钩子位置,暂无EF Core版本) EntityFrame ...

  2. Java算法-------无序数组中的最长连续序列---------leetcode128

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  3. 正确、安全地停止SpringBoot应用服务

    引言 Spring Boot,作为Spring框架对"约定优先于配置(Convention Over Configuration)"理念的最佳实践的产物,它能帮助我们很快捷的创建出 ...

  4. 水题 第三站 HDU Largest prime factor

    先写一遍思路,跟素数表很类似吧. 1)从小到大遍历数据范围内的所有数.把包含质因子的数的位置都设成跟质因子的位置相同. 2)同一个数的位置可能被多次复写.但是由于是从小到大遍历,这就保证了最后一次写入 ...

  5. eclipse 常用快捷键 及 windows快捷键

    Eclipse常用快捷键 打开Eclipse快捷键的快捷键 Ctrl+Shift+L 快捷键 描述 原英文描述 Ctrl+Shift+P 定位到光标所在处的括号的另一半括号的位置 Go to Matc ...

  6. 同一个tomcat多个项目共享session,一个tomcat两个项目共享sessionId

    同一个tomcat多个项目共享session,一个tomcat两个项目共享sessionId >>>>>>>>>>>>>& ...

  7. Microsoft office2010页码设置----论文、课程设计报告格式

    思想:将目录页(含目录页)与目录页以下的页面用分隔符分隔开,单独设置目录页以下的页面页码,删除目录页(含目录)以前的页码. 1.在目录页页面内容最下面一行插入分隔符,实现与下面页面分隔开的目的. 页面 ...

  8. Javassist进行方法插桩

    javassist官网 http://jboss-javassist.github.io/javassist/ javassist API网 http://jboss-javassist.github ...

  9. java系统高并发解决方案(转载收藏)

    一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站 ...

  10. window10(64bit)+VS2010编译ACE_TAO源码库

    1.下载 ACE+TAO下载地址:http://download.dre.vanderbilt.edu/previous_versions/ VS2010下载地址:https://pan.baidu. ...