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 简述 效果 源码 使用 更多 ...
随机推荐
- web前段学习2017.6.13
CSS---表现层,修饰和表现html文档,为了解决结构层和表现层分离的问题. 通过CSS极大的提高了工作效率,方便工作人员维护和管理CSS:层叠样式表,目前用的最广泛的css版本为css2,最新版本 ...
- PHP面向对象 ——多态
接口 接口(interface)是抽象方法和静态常量定义的集合. 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量. 接口中没有其它类型的内容 接口的定义 /** * 接口可以认为是特殊的 ...
- Android之RecyclerView入门
首先来实现最简单的列表展示,如图 在这个展示中,RecyclerView的作用仅限于回收和定位屏幕上的TextView,在用户滑动屏幕时,会把上一个视图回收掉,并显示下一个页面的视图,也就是回收再利用 ...
- Go语言string,int,int64 ,float转换
(1)int转string s := strconv.Itoa(i)等价于s := strconv.FormatInt(int64(i), 10) (2)int64转string i := int64 ...
- python基础(6):列表和字典类型
前面我们所接触的数据类型都是存单个值,今天我们来看看可以存多个值的列表和字典. 预习: 1.有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日 ...
- 20170713_filter/sort
js:filter过滤数组元素 //1.数组取奇数 var arr = [1,2,3,4,5]; var r = arr.filter(function(x){ return x % 2 !== 0; ...
- 配置HTTPS服务
环境为CentOS 7.3.httpd2.4.6 一 搭建证书 说明: CA 主机为192.168.29.3 client主机为 192.168.29.100 1 生成私钥 [root@centos7 ...
- IBATIS动态SQL(1)
转:IBATIS动态SQL 直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的 ...
- (转)java并发之Executor
场景: 线程池在面试时候经常会碰到,在工作中用的场景更多,所以很有必要弄清楚. 1 简介 Java自1.5以来加入了处理一批线程的方法,也就是java并发包里的Executor.本文主要介绍Execu ...
- (转)JAVA新特征
Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务 ...