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 简述 效果 源码 使用 更多 ...
随机推荐
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- vijos1090题解
题目: 有n个正整数排成一行.你的目的是要从中取出一个或连续的若干个数,使它们的和能够被k整除. 例如,有6个正整数,它们依次为1.2.6.3.7.4.若k=3,则你可以取出1.2.6,或者2.6.3 ...
- Jmeter之分布式测试
1)Jmeter 是纯java 应用,对于CPU和内存的消耗比较大,并且受到JVM的一些限制: 一般情况下,依据机器配置,单机的发压量为300-600,因此,当需要模拟数以千计的并发用户时,使用单台机 ...
- 阿里云服务器 Windows连接不成功 提示“你的凭证不工作” 解决方法
HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control ->Terminal Server -> Wds ...
- 【转载】Android 开发 命名规范
原文地址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...
- [转]从入门到精通: 最小费用流的“zkw算法”
>>>> 原文地址:最小费用流的“zkw算法” <<<< 1. 网络流的一些基本概念 很多同学建立过网络流模型做题目, 也学过了各种算法, 但是对于基本 ...
- Carthage的安装和使用
为什么要使用Carthage CocoaPods是已存在很长时间的Cocoa依赖管理器, 那么为什么要创建Carthage呢? CoaoaPods是一套整体解决方案,我们在Podfile中指定好我们需 ...
- iOS开发 MVVM+RAC 的使用
好长一段时间没有敲简书了! 主要是因为一直在跑面试. 终于还是在上海入职了! 由于项目原因最终还是入了MVVM+RAC的坑 下面是正题. Demo效果 使用MVVM+RAC请求网络数据 Reactiv ...
- iOS TextField输入限制(限制长度、只能输入数字,只能输入数字字母……)
项目中各个地方都会用到TextField,textField的输入也会有各种需求,各种限制,每次用到的时候要重写一遍这些限制,导致各种垃圾代码,各种重复,有一天,我终于看不下去了,于是把textFie ...
- 我的"Hello World!"之旅
不知从何谈起,回想起三年前的自己,那会是高三:同时也是一个让无数骚年悸动的年代,那时候的我也在一个叫做“召唤师峡谷”神奇的地方闯荡了两年.那么,记忆又会回到2012年的元旦,伴随着几个好友,偷偷摸摸地 ...