Qt之自定义界面(右下角冒泡)

简述

网页右下角上经常会出现一些提示性的信息,桌面软件中也比较常见,类似360新闻、QQ消息提示一样!

这种功能用动画实现起来很简单,这节我们暂时使用定时器来实现,后面章节会对动画框架进行详细讲解。

下面我们来实现一个右下角冒泡的功能。

  • 简述
  • 效果
  • 实现原理
  • 连接信号与槽
  • 实现

效果

实现原理

  • 显示
    定时器启动,右下角缓慢弹出,逐渐改变位置
  • 驻留
    让界面停留一定的时间,时间过后自动关闭。
  • 退出
    可以直接点击关闭退出,也可以采用改变透明度的形式模糊退出。

连接信号与槽

m_pShowTimer = new QTimer(this);
m_pStayTimer = new QTimer(this);
m_pCloseTimer = new QTimer(this);

connect(m_pShowTimer, SIGNAL(timeout()), this, SLOT(onMove()));
connect(m_pStayTimer, SIGNAL(timeout()), this, SLOT(onStay()));
connect(m_pCloseTimer, SIGNAL(timeout()), this, SLOT(onClose()));

实现

界面现实的时候调用showMessage(),然后启动定时器开始显示、驻留、关闭。

// 显示
void MainWindow::showMessage()
{
    QRect rect = QApplication::desktop()->availableGeometry();
    m_point.setX(rect.width() - width());
    m_point.setY(rect.height() - height());
    move(m_point.x(), m_point.y());
    m_pShowTimer->start(5);
}

// 移动
void MainWindow::onMove()
{
    m_nDesktopHeight--;
    move(m_point.x(), m_nDesktopHeight);
    if (m_nDesktopHeight <= m_point.y())
    {
        m_pShowTimer->stop();
        m_pStayTimer->start(5000);
    }
}

// 驻留
void MainWindow::onStay()
{
    m_pStayTimer->stop();
    m_pCloseTimer->start(100);
}

// 关闭
void MainWindow::onClose()
{
    m_dTransparent -= 0.1;
    if (m_dTransparent <= 0.0)
    {
        m_pCloseTimer->stop();
        close();
    }
    else
    {
        setWindowOpacity(m_dTransparent);
    }
}
时间: 2024-12-23 06:35:35

Qt之自定义界面(右下角冒泡)的相关文章

Qt之自定义界面(窗体缩放-跨平台终极版)

简述 通过上一节内容,我们实现了窗体的缩放,功能很不错,但是很遗憾-不支持跨平台!如果对于多平台来说,这是一个硬伤,所以,我们急需要一个能够支持跨平台的实现方案. 在网上看到过很多不同的实现方式,多多少少会存在一些问题-要么融合度太高.要么不能很好地进行移动.缩放.基于前人的分享与总结,最后,我花了很长时间来完善.独乐乐不如众乐乐,既然纯开源-那就全部分享出来. 简述 效果 窗体缩放 实现 接口说明 使用方式 平台支持 效果 窗体缩放 实现 frameless_helper.h #ifndef

Qt之自定义界面(QMessageBox)

简述 通过前几节的自定义窗体的学习,我们可以很容易的写出一套属于自己风格的界面框架,通用于各种窗体,比如:QWidget.QDialog.QMainWindow. 大多数窗体的实现都是采用控件堆积来完成的,只要思路清晰,再复杂的界面实现起来都游刃有余.下面我来列举一个由QMessageBox扩展的提示框-根据其源码实现思路来实现! 简述 效果 自定义提示框 实现 接口说明 二次封装 使用方式 源码学习 效果 自定义提示框 实现 message_box.h #ifndef MESSAGE_BOX

Qt之自定义界面(实现无边框、可移动)

简述 UI设计是指对软件的人机交互.操作逻辑.界面美观的整体设计.好的UI设计不仅是让软件变得有个性.有品位,还要让软件的操作变得舒适简单.自由,充分体现软件的定位和特点. 爱美之心人皆有之.其实软件界面就像工业造型一样,是产品的重要卖点.一个产品拥有美观的界面会给人带来舒适的视觉享受,拉近人与产品的距离,是建立在科学性之上的艺术设计. 检验一个界面的标准-既不是某个项目开发组领导的意见,也不是项目成员投票的结果,而是终端用户的感受. 所以,对于大多数商业软件或者专业产品来说,Qt的本地化样式显

Qt之自定义界面(窗体缩放)

简述 通过前两节内容,我们实现了自定义窗体的移动,以及自定义标题栏-用来显示窗体的图标.标题,以及控制窗体最小化.最大化.关闭. 在这之后,我们还缺少窗体的缩放-当鼠标移动到窗体的边框-左.上.右.下.左上角.左下角.右上角.右下角时候,鼠标变为相应的样式,并且窗体可以随着鼠标拖动而进行放大.缩小. 简述 效果 窗体缩放 实现 接口说明 效果 窗体缩放 实现 包含头文件与需要用到的库 #ifdef Q_OS_WIN #include <qt_windows.h> #include <Wi

Qt之自定义界面(添加自定义标题栏)

简述 通过上节内容,我们实现了自定义窗体的移动,但是我们缺少一个标题栏来显示窗体的图标.标题,以及控制窗体最小化.最大化.关闭的按钮. 自定义标题栏后,所有的控件我们都可以定制,比如:在标题栏中添加换肤.设置按钮以及其他控件. 简述 效果 自定义标题栏 实现 接口说明 使用方式 效果 自定义标题栏 实现 title_bar.h #ifndef TITLE_BAR #define TITLE_BAR #include <QWidget> class QLabel; class QPushButt

《Qt 实战一二三》

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队. 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们要立足眼下,把第一站放在地球,"<Qt 实战一二三>&quo

Qt实战一二三

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队,还在等什么,赶快加入吧! 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们需要立足眼下,把我们的第一站放在地球,"Qt实战

Qt之窗体拖拽、自适应分辨率、自适应大小

简述 在自定义无边框.标题栏的界面中,需要自己实现最小化.最大化.关闭.窗体背景等功能.最小化.最大化.关闭等按钮设计及功能比较简单,这里就不多做介绍.今天主要介绍一下绘制背景的问题,主要实现自适应屏幕分辨率. 简述 实现 自适应方案 效果 源码 实现 先看一下UI设计的图(大小:1298*786): 自适应方案 如何自适应屏幕分辨率呢?下面是常用的一些方案: 为每个分辨率单独做一张图 将图片切分为九宫格形 在原图基础上进行实现 下面,我们分别对它们一一进行分析: 常用的分辨率很多,800*60

Qt学习之路(14):状态栏

今天的内容主要还是继续完善前面的那个程序.我们要为我们的程序加上一个状态栏. 状态栏位于主窗口的最下方,提供一个显示工具提示等信息的地方.一般地,当窗口不是最大化的时候,状态栏的右下角会有一个可以调节大小的控制点:当窗口最大化的时候,这个控制点会自动消失.Qt提供了一个QStatusBar类来实现状态栏. Qt具有一个相当成熟的GUI框架的实现--这一点感觉比Swing要强一些--Qt似乎对GUI的开发做了很多设计,比如 QMainWindow类里面就有一个statusBar()函数,用于实现状