Qt实现屏幕底部冒泡效果

在Qt局域网聊天程序的到的东西太多了,最想和大家分享的是关于局域网聊天信息的冒泡,他的设计也不是特别难,我写了一个类分享给大家。

可能各位道友有更好的办法,但希望不要拆台哦。

该类中有一部分适应屏幕分辨率的类,也一并加入。如有不懂的欢迎大家留言。

首先是获取屏幕分辨率,并实现自适应屏幕分辨率。

#ifndef VERDESKTOP_H
#define VERDESKTOP_H

#include <QObject>
#include <QDesktopWidget>

class VerDesktop : public QObject
{
  Q_OBJECT
public:
  explicit VerDesktop(QObject *parent = 0);
  float getVerDesktop();

signals:

public slots:
};

#endif // VERDESKTOP_H
#include "verdesktop.h"

VerDesktop::VerDesktop(QObject *parent) : QObject(parent)
{
}
float VerDesktop::getVerDesktop()
{
  QDesktopWidget dw;
  float ver=float(dw.screenGeometry().width())/float(1920);
  return ver;
}

以下是冒泡的代码

#ifndef MESSAGEDIALOG_H
#define MESSAGEDIALOG_H
#include <QDialog>
#include <QPropertyAnimation>
#include <QLabel>
#include "verdesktop.h"
#include <QTimer>
#include <QPaintEvent>
#include <QPainter>

class MessageDialog : public QDialog
{
  Q_OBJECT
public:
  float ver;
  VerDesktop *v;//适应屏幕分辨率
  explicit MessageDialog(QWidget *parent=0);
  QLabel *imagelabel;//头像
  QLabel *namelabel;//名
  void messagedialogseting();//设置
  QTimer *timer0;
private:
  void paintEvent(QPaintEvent *event);

public slots:
  void timerout();
};

#endif // MESSAGEDIALOG_H
#include "messagedialog.h"
#include <QApplication>
#include <QDesktopWidget>
#include <QGraphicsDropShadowEffect>
#include <QPalette>

MessageDialog::MessageDialog(QWidget *parent):QDialog(parent)
{
  v=new VerDesktop(this);
  ver=v->getVerDesktop();
  messagedialogseting();
  connect(timer0,SIGNAL(timeout()),this,SLOT(timerout()));
}
void MessageDialog::messagedialogseting()//显现的动画
{
  QPalette palette(this->palette());
  palette.setColor(QPalette::Background,QColor(49,225,215));
  setPalette(palette);
  setAutoFillBackground(true);
  setWindowFlags(Qt::FramelessWindowHint|windowFlags());
  QRect rect=QApplication::desktop()->availableGeometry();
  setGeometry(rect.width()-250*ver,rect.height()-80*ver,250*ver,80*ver);
  QGraphicsDropShadowEffect *effect=new QGraphicsDropShadowEffect(this);
  effect->setOffset(10,10);
  effect->setBlurRadius(10);
  effect->setColor(QColor(50,50,50));
  this->setGraphicsEffect(effect);
  imagelabel=new QLabel(this);
  namelabel=new QLabel(this);
  imagelabel->setGeometry(5*ver,15*ver,50*ver,50*ver);
  namelabel->setGeometry(90*ver,0,150*ver,80*ver);
  namelabel->setFont(QFont("微软雅黑",15*ver));
  namelabel->setAlignment(Qt::AlignCenter);
  QPropertyAnimation *animation0=new QPropertyAnimation(this,"geometry");
  animation0->setDuration(500*ver);
  animation0->setStartValue(QRect(rect.width(),rect.height()-80*ver,250*ver,80*ver));//起点
  animation0->setEndValue(QRect(rect.width()-250*ver,rect.height()-80*ver,250*ver,80*ver));//终点
  animation0->start(QAbstractAnimation::DeleteWhenStopped);
  timer0=new QTimer(this);
  timer0->start(1000);
}
void MessageDialog::timerout()//消失的动画
{
  timer0->stop();
  QPropertyAnimation *animation0=new QPropertyAnimation(this,"windowOpacity");
  animation0->setDuration(500);
  animation0->setStartValue(1);
  animation0->setEndValue(0);
  animation0->start(QAbstractAnimation::DeleteWhenStopped);
  connect(animation0,SIGNAL(finished()),this,SLOT(close()));
}
void MessageDialog::paintEvent(QPaintEvent *event)//做阴影
{
  const int x=3;
  Q_UNUSED(event);
  QPainterPath yinying_path;
  yinying_path.setFillRule(Qt::WindingFill);
  yinying_path.addRect(x,x,this->width()-2*x,this->height()-2*x);
  QPainter painter(this);
  painter.setRenderHint(QPainter::Antialiasing,true);
  QColor color(0,0,0,50);
  for(int i=0;i<x;i++)
  {
    QPainterPath path;
    path.setFillRule(Qt::WindingFill);
    path.addRect(x-i, x-i, this->width()-(x-i)*2, this->height()-(x-i)*2);
    color.setAlpha(150 - sqrt(i)*50);
    painter.setPen(color);
    painter.drawPath(path);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • QT实现提示右下角冒泡效果

    本文实例为大家分享了QT实现提示右下角冒泡的具体代码,供大家参考,具体内容如下 实现原理: 1.显示 定时器启动,右下角缓慢弹出,逐渐改变位置. 2.驻留 让界面停留一定的时间,时间过后自动关闭. 3.退出 可以直接点击关闭退出,也可以采用改变透明度的形式模糊退出. #ifndef _QTOOLTIPS_ #define _QTOOLTIPS_ #include <QTimer> #include <QDialog> #include "ui_QToolTips.h&qu

  • Qt实现屏幕底部冒泡效果

    在Qt局域网聊天程序的到的东西太多了,最想和大家分享的是关于局域网聊天信息的冒泡,他的设计也不是特别难,我写了一个类分享给大家. 可能各位道友有更好的办法,但希望不要拆台哦. 该类中有一部分适应屏幕分辨率的类,也一并加入.如有不懂的欢迎大家留言. 首先是获取屏幕分辨率,并实现自适应屏幕分辨率. #ifndef VERDESKTOP_H #define VERDESKTOP_H #include <QObject> #include <QDesktopWidget> class Ve

  • QT实现简单时钟效果

    本文实例为大家分享了QT实现简单时钟效果的具体代码,供大家参考,具体内容如下 先上效果图: 预备知识: 一.钟表实现原理 设置定时器timer,每隔1000毫秒(即1s)发送timeout()信号到槽函数update(),重绘事件函数paintEvent(QPaintEventevent) 二.钟表的绘制方法 拆分钟表:表盘 数字 刻度线 指针 paintEvent(QPaintEventevent) 1.设置定时器,时间间隔为1000毫秒,并且将定时器时间与update函数关联为信号和槽,定时

  • Qt实现樱花飞舞效果

    本文实例为大家分享了Qt实现樱花飞舞效果的具体代码,供大家参考,具体内容如下 应女友要求,使用Qt做了一个在电脑桌面樱花飞舞的小程序.这里面用到了Qt动画效果QPropertyAnimation类来控制飞舞效果.使用label加载樱花图案.大概的核心代码如下: Widget::Widget(QWidget *parent) : QWidget(parent), timer(new QTimer(this)), pixmap(new QPixmap(":/cherry.png")), u

  • Qt实现简易毛玻璃效果的示例代码

    目录 现有功能 运行结果 源码 frosted_glass_label.h frosted_glass_label.cpp main.cpp 现有功能 1.用模糊功能实现简易的毛玻璃效果. 2.鼠标移动无边框窗口. 运行结果 源码 frosted_glass_label.h #ifndef FROSTEDGLASSLABEL_H #define FROSTEDGLASSLABEL_H #include <QWidget> #include <QLabel> #include <

  • Qt实现字幕滚动效果的示例代码

    目录 一.项目介绍 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 widget.h头文件 4.2 widget.cpp源文件 五.效果演示 一.项目介绍 利用QTimer实现字幕滚动功能,可以实现自行更改文本内容.自适应文本大小.自由调整速度等功能. 二.项目基本配置 新建一个Qt案例,项目名称为“TextScroll”,基类选择“QWidget”,取消创建UI界面复选框的选中状态,完成项目创建. 三.UI界面设计 无UI界面 四.主程序实现 4.1 widget.h头文件 声明私

  • Qt实现栅格布局效果

    Qt提供QGridLayout类来实现栅格布局,所谓栅格,就是网格,拥有规律的行和列,通过QGridLayout可以很方便的对多个控件进行布局. 如果在设计师中进行拖拽绘制,一旦需求有变,需要增加或者删除控件,就被迫打破原来的布局,重新进行调整,这是一件很耗时的事件, 所以通过代码画,还能做到复用,往往是首选. 效果: 代码: #include "mainwindow.h" #include "ui_mainwindow.h"   MainWindow::MainW

  • Qt 实现画线笔锋效果详细原理及示例代码

    前言 之前写过一篇文章介绍Qt中绘制平滑曲线的两种方式,文章在这里.这篇文章详细介绍了绘制的原理和实现方式,那么,如果要在此曲线上实现笔锋效果怎么做呢? 所谓的笔锋效果,就是钢笔书写抬笔时的笔尖,也就是说,绘制曲线抬笔时形成一个笔尖的效果. 话不多说,直接来看效果: 动画效果如下: 实现原理 要实现该效果,需要完成以下几个关键步骤: 1.每两个点形成一个贝塞尔曲线path进行绘制 2.最新的一条path绘制细线(笔锋最细处的宽度) 3.倒数第二条path绘制粗线(正常的线条宽度) 4.在两条pa

  • Qt利用QScroller实现home界面滑动效果

    目录 1.QScroller类 2.QScrollerProperties滑动器参数类 3.表格类的使用示例 4.自定义home界面Demo示例 在学习本章之前需要知道滑动的关键词: 鼠标按下,鼠标滑动 : 指的是用户按下屏幕,然后进行移动的操作,此时用户滑动多少距离,那么视图就偏移多少距离. 平滑滑动 : 指的是手指离开屏幕了,然后会读取滑动的速率(距离/时间),从而让视图自己平滑的再滑动一段距离. 1.QScroller类 用于触摸屏的一个滑动器,实现用户用手指来滑动视图,有大量的参数设置可

  • 在桌面右下角出现温馨提示的vbs冒泡程序

    这个功能的原理呢,就是用vbs生成exe文件,然后运行,只不过这个exe比较小,不用两个文件了,一个vbs即可实现vbs冒泡效果 复制代码 代码如下: Data = "4D5A00000000000000000000504500004C010200534C58210000000000000000E0000F010B01000000000000000600000000000054010000001000000C00000000004000001000000002000004000000000000

随机推荐