Qt实现冒泡提示框
通过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实现冒泡提示框的更多相关文章
- Qt之等待提示框(QMovie)
简述 关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系. 关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的. ...
- Qt之等待提示框(QTimer)
简述 上节讲述了关于QPropertyAnimation实现等待提示框的显示,本节我们使用另外一种方案来实现-使用定时器QTimer,通过设置超时时间定时更新图标达到旋转效果. 简述 效果 资源 源码 ...
- Qt之等待提示框(QPropertyAnimation)
简述 之前分享过QLabel可以通过QMovie播放gif图片,可以实现等待提示框,今天主要使用动画QPropertyAnimation来进行实现! 数据加载的时候,往往都需要后台线程进行数据请求,而 ...
- 纯CSS制作冒泡提示框
来源:http://www.ido321.com/1214.html 前两天翻译了一篇文章,关于利用css的border属性制作基本图形:http://www.ido321.com/1200.html ...
- qt之透明提示框(模拟qq) (非常漂亮)
Qt实现类似QQ的登录失败的提示框,主要涉及窗口透明并添加关闭按钮,以及图标和信息的显示等. 直接上代码: #include "error_widget.h" ErrorWidge ...
- Qt之透明提示框
简述 经常使用企鹅的小伙伴一定对登录失败的提示框很熟悉,主要涉及窗口透明并添加图标.提示信息.关闭按钮的显示等. 我们可以利用QWidget创建一个提示框,然后通过样式设置我们想要的效果. 简述 效果 ...
- Qt之等待提示框三(QLabel进行多图片切换)
之前分享过的等待提示框有用QMovie播放gif图片实现的,也有纯代码实现的,今天再次分享另一种实现方式,如题目所示:QLabel进行图片的切换! 进行用户登录的时候,往往都需要后台线程进行用 ...
- css实现带边框的冒泡提示框
需求是实现这种效果, 因为内容是动态的,使用图片不是很好: 原因: 如果内容确定只是一行,可以效果图裁剪3部分,分别是两侧和中间部分,然后用backgroud插入三张图片,但是要是内容是2行就不好处理 ...
- Qt之QProgressIndicator(等待提示框)
简述 很早以前在网上看到一个纯代码实现的旋转动画感觉效果很不错,分享给大家.不得不说,条条大道通罗马,我们需要更多地创造... 详见:QProgressIndicator 简述 效果 源码 使用 更多 ...
随机推荐
- APP测试相关点归纳
APP测试相关点归纳 1.1测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为一两周,根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前需确认项目排期. 1.2测试资源 ...
- 本地服务器 windows server 2008 datacenter conn /as sysdba 提示 ora-01031 insufficient privileges
原因是需要把当前用户administrator(为例)添加到ora_dba组里. 服务器管理器--配置--本地用户和组--组
- php七牛批量删除空间内的所有文件方法
相信大家都在使用七牛的免费云存储服务的同时,有清空七牛云存储镜像文件或者批量删除七牛云空间文件的需求,该怎么做?官方的工具好像并没有提供批量删除的功能,七牛云官方给出的建议是删除空间,再新建一个这样太 ...
- 18-EasyNetQ:发生错误的情况
这一篇文章让我们看看在消息系统中可能发生的各种错误的情况下,看下EasyNetQ如何处理它们. 订阅服务挂了 当你写了一个windows 服务,用来订阅一个NewCustomerMessage消息. ...
- JS事件响应的学习总结
点击事件:ocnlick 鼠标经过事件:onmouseover 鼠标移开事件:onmouseout 获得焦点事件:onfocus 失去焦点事件:onblur 内容选中事件:onselect 文本框内容 ...
- Spark的误解-不仅spark是内存计算,hadoop也是内存计算
市面上有一些初学者的误解,他们拿spark和hadoop比较时就会说,Spark是内存计算,内存计算是spark的特性.请问在计算机领域,mysql,redis,ssh框架等等他们不是内存计算吗?依据 ...
- 关于github 0.6.2版本的使用方法
貌似做为一名前端开发人员,没听过使用过github,node,vue就像落伍一样,本人也是在前端自摸自爬的路上越走越远了,经常在群里听大神们讨论vue,github,node,好生羡慕,没人教,没人带 ...
- MVC MVC+EF快速搭建
MVC+EF快速搭建 一.准备: vs2017(个人用的) 二.开始MVC+EF之旅吧: 1.创建mvc项目: Web-ASP.NET Web Application(.NET Framework) ...
- (转)memcached学习笔记1(windows 7 64bit 环境下安装memcached)
windows 7 64bit 环境下安装memcached 1.下载后解压到D:\memcached(下载地址:memcached-win64下载地址) 2.安装到windows服务,打开cmd命令 ...
- (转)Synchronized(对象锁)和Static Synchronized(类锁)的区别
场景:面试的时候经常用得到! 1 综述 Synchronized和Static Synchronized区别 一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全 ...