简述

在Qt 之 QQ系统表情(五) 中 我们实现了自定义系统表情窗口,这一篇将简单介绍如何实现QQ聊天界面中小表情窗口切换至正常表情窗口的动画效果。

先看看QQ的效果:

当鼠标悬浮在表情按钮之上显示小表情窗口,点击动态显示正常表情窗口,再点击隐藏窗口。表面上看起来这几个动作很简单,但是要想控制好着实不易,下面直接上代码。


代码之路

//显示小窗口
void EmotionWindow::showSmallEmotion(QPoint point)
{m_normalEmotionWidget->setVisible(false);m_smallEmotionWidget->setVisible(true);m_lableTitle->setText("This is Small Emotion Window");this->resize(QSize(m_smallEmotionWidget->width() + 20, m_smallEmotionWidget->height() + 50));move(point.x() - width() / 2, point.y() - height());show();activateWindow();
}//从小窗口变换至大窗口效果显示
void EmotionWindow::showNormalEmotion(QPoint point)
{   //将小表情窗口和文字提示隐藏m_lableTitle->setVisible(false);m_smallEmotionWidget->setVisible(false);show();activateWindow();//动画显示QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "geometry");QPoint startPoint(point.x() - width() / 2, point.y() - height());QPoint endPoint(point.x() - m_normalEmotionWidget->width() / 2, point.y() - m_normalEmotionWidget->height() - 50);// 动画显示时长pAnimation->setDuration(200);// 窗口变换起始尺寸pAnimation->setStartValue(QRect(startPoint.x(), startPoint.y(), width(), height()));// 窗口变换结束尺寸pAnimation->setEndValue(QRect(endPoint.x(), endPoint.y(), m_normalEmotionWidget->width() + 20, m_normalEmotionWidget->height() + 50));// 变换效果类型pAnimation->setEasingCurve(QEasingCurve::Linear);pAnimation->start(QAbstractAnimation::DeleteWhenStopped);// 动画效果显示结束显示正常的窗口connect(pAnimation, SIGNAL(finished()), this, SLOT(onAnimationFinished()));
}//动画显示结束,显示正常的窗口
void EmotionWindow::onAnimationFinished()
{m_lableTitle->setVisible(true);m_normalEmotionWidget->setVisible(true);    m_lableTitle->setText("This is Normal Emotion Window");
}bool EmotionWindow::eventFilter(QObject *obj, QEvent *event)
{// 调用activeWindow()方法后进入if (QEvent::WindowActivate == event->type()){qDebug() << "WindowActivate_____________";}// 窗口失去焦点后进入(这里用来当鼠标点击表情窗口外的其他部分自动隐藏表情窗口)else if (QEvent::WindowDeactivate == event->type()){this->hide();qDebug() << "WindowDeactivate___________";}return __super::eventFilter(obj , event);
}

看一下效果图:

以上给出了关键的几个方法,具体鼠标点击按钮、悬浮在按钮上等显示不同的窗口由于还存在一些小问题,暂不给出具体实现,在下一篇中将完善实现完整效果,敬请期待!


——掐指一算,已经20天没有更新博客了,这20天说忙也忙,说不忙也不忙。时间永远都是海绵中的水,还是在于自己的掌控。Keep Coding , Keep Moving —— Every Day !

Qt 之 QQ系统表情—实现动态显示效果相关推荐

  1. Vc++ - qt -仿照微信项目- 表情窗口设计

    分享的力量是无穷的,在csdn上搜索关于表情窗口的设计,偶然发现之前有人做过关于表情这方面的工作,博主:前行中的小猪,相关系列文章 <<QQ之系统表情>>,这里提供<&l ...

  2. Qt工作笔记-Qt元对象系统解析【2合1】

    博文转载地址: https://blog.csdn.net/spwper/article/details/51332187 说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大.这也是大家讲Qt ...

  3. [练习]QQ/微信 表情收藏-测试用例的编写 [简洁思路]

    QQ电脑版添加表情: 微信添加表情: 手机版QQ添加表情: 总结上次经验,这次可以分成几个方向进行测试用例编写: 1. 功能方面 :正常的功能能不能正常使用,图片上限 2. 性能方面 :网络.时间.类 ...

  4. Pango+Qt 列举windows系统字体

    欢迎关注公众号可以查看更多完整文章 可以显示Windows上所安装的所有字体的名称. 使用Qt显示数量和名称. 需要依赖Pango.Cairo.glib三个库,获取三个库,获取可以参见我的其他博客. ...

  5. Qt 实现 QQ 9.0 新版登录窗口

    简述 QQ的界面又进行了一波更新,登录界面的样式换了一种全新的效果.一直很喜欢QQ的界面,所以进行了一波模仿. 点击登录,登录成功之后,右侧会出现一条伸出的竖线,然后窗口会自动向右移动直到窗口完全隐藏 ...

  6. Qt模仿QQ聊天窗口界面(二)

    Qt模仿QQ聊天窗口界面(二) Qt模仿QQ聊天窗口界面(二) 简述 修改 效果图 后期规划 代码 结尾 简述 在上篇我们已经搭好了QQ聊天窗口的框架,这里在原来的基础上叠加功能,以及优化一些控件. ...

  7. 一种用QT实现即时通信软件表情发送与接收的思路

    一种用QT实现即时通信软件表情发送与接收的思路 最近需要使用QT为项目添加一个表情包发送与接受的功能,虽然之前知道表情发送与接收显示的一个基本原理,但是其中涉及到例如表情包插入到QTextEdit如何 ...

  8. 如何在线制作QQ微信表情包

    不知道大家有没有在聊天时看见朋友发来自己的表情包?很好奇他们是怎么制作的?今天,手把手教大家如何制作表情包,以后在微信.QQ聊天的时候,你也可以发出属于你自己的表情包了. 其实很简单的下面就开始制作我 ...

  9. 【原创】QT在嵌入式系统中显示中文的方法

    [原创]QT在嵌入式系统中显示中文的方法 此篇文章主要借鉴:http://zzqh007.blog.163.com/blog/static/44434847201011312168296/ 移植QT4 ...

  10. 实现类似微博、QQ空间等的动态加载

    微博.QQ空间等的动态加载方式属于滚屏加载技术,获取当前滚动条位置来触发onscroll()函数,向服务器发起请求,将请求得到的新的数据动态加载在页面上 本文利用该原理实现了动态加载,但不是检测当前滚 ...

最新文章

  1. dos下命令行执行程序时候注意程序所使用文件的路径问题
  2. 如何使用Mockito模拟void方法
  3. Python编程基础:第二十五节 args参数*args
  4. python函数应用_Python 函数及其应用
  5. MySQL 中存储时间的最佳实践
  6. h5 右下角浮动按钮_意派Epub360丨国庆黄金周将至,分享9个H5互动营销思路
  7. jQueryEasyUI Messager基本使用
  8. Unity3dRPG 相机跟随player旋转_跟随式灌装机
  9. java生成bcp_java-如何将IETF BCP 47语言代码转换为显示字符串?
  10. wp login.php 打不开,解决wordpress后台无法登录或显示空白的问题
  11. MySQL binlog_format (Mixed,Statement,Row)
  12. 现代优化算法 之 禁忌搜索算法
  13. Java开发之消息队列
  14. 《我爱我的祖国》受捧 再现专线另类舌尖上中国
  15. 瑞思教育被认定为“公共空壳”公司,要参与电动汽车业务?
  16. Django知识点:认识Django
  17. iOS第三方库汇总分享
  18. SLAM导航机器人零基础实战系列:(四)差分底盘设计——2.stm32主控软件设计
  19. 【ZT】2D动画制作工具比较
  20. 关于编译WebRTC Linux/Android版源码的说明

热门文章

  1. ROS 教程1 机器人操作系统 基础知识 节点 话题 消息 服务 行动 参数 日志 TF变换 目标结构 启动文件
  2. 5角星画法 android,Android Canvas绘制正多边形和正多角星
  3. 蓝桥杯总结及经验教训
  4. QuickChm出现的“不支持此接口”错误解决
  5. Autojs 3.0文档学习之设备信息
  6. Qt构建时出现Makefile Error 1的解决办法
  7. GTK开发(一)创建第一个窗口
  8. 关于模拟信号和数字信号的储存
  9. MVC项目使用easyui的filebox控件上传文件
  10. Flash Player 更新后视频卡问题