1. 程式人生 > >Qt 之 QQ系統表情—實現動態顯示效果

Qt 之 QQ系統表情—實現動態顯示效果

簡述

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系統表情實現動態顯示效果

簡述 在Qt 之 QQ系統表情(五) 中 我們實現了自定義系統表情視窗,這一篇將簡單介紹如何實現QQ聊天介面中小表情視窗切換至正常表情視窗的動畫效果。 先看看QQ的效果: 當滑鼠懸浮在表情按鈕之上顯示小表情視窗,點選動態顯示正常表情視窗,再點選隱

JSP中實現動態顯示系統時間

JSP中實現動態顯示系統時間可以使用js來編寫,如下程式碼: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-

MFC通過button控制編輯框是否顯示系統時間(動態顯示

box style public ack span ren item upd 函數 1.在dlg.h中public bool flag; static UINT time(void *param); 2.在構造函數中 flag=fal

Web前端攻城獅培養計劃HTML5與CSS3實現動態網頁

整體 script 靜態 觸發 我們 發展方向 web前端 事件 會有 步驟1: 初識HTML5本階段內容主要涵蓋HTML5新增、刪除標簽、標簽屬性變化以及HTML5布局知識。通過本階段學習,大家可以運用HTML5標簽輕松實現網頁音樂播放器和視頻播放器,熟練運用HTML5的

js實現動態顯示時間

css rip 無法顯示 寫入 title 定時器 order date oca 思路: *得到當前時間   var date = new Date();   //格式化為本地時間   var d1 = date.toLocaleString(); *使頁面每秒顯示一次時間

套介面層socket系統呼叫實現

這篇筆記記錄了AF_INET協議族在套介面層對scoket()系統呼叫的實現,注意這裡只介紹了套介面層的實現,相比於完整的socket()系統呼叫實現,這裡缺少兩部分內容: 檔案系統相關的部分,比如檔案描述符的分配等; 傳輸層的實現,套接字的建立肯定是要傳輸層

Ajax實現動態顯示並操作表資訊

在jsp連線資料庫訪問並顯示資料庫資訊時,使用Ajax利用json物件會在頁面不重新整理的情況下獲取到資料。但若是要顯示資料庫表中的資訊,就需要動態的生成表的行以及單元格。並且對每一行的操作也是需要動態繫結的。 今天分享給各位的是完成在對資料庫表資訊的顯示、增加、刪除、修改

定製Android系統開發四——系統服務實現的分析

在上一篇博文中,我給出了實現系統服務的步驟,這篇博文則將分析一下,為什麼這樣的實現方式能夠實現客戶端/伺服器模式。 RadioManagerService 首先來看一下RadioManagerService是如何建立的。 如果我沒有記錯的話,Syste

Qt程式最小化托盤顯示及操作

1.功能說明 對於GUI程式,如果想要實現當最小化時,程式從工作列消失,在系統托盤顯示一個圖示,表示此程式,並能在托盤內通過雙擊或者選單使程式介面恢復。 2.使用的類 主要使用的此類:QSystemTrayIcon。 其中QSystemTrayIcon是

Android實現動態顯示或隱藏密碼輸入框的內容

本文例項展示了Android實現動態顯示或隱藏密碼輸入框內容的方法,分享給大家供大家參考之用。具體方法如下: 該功能可通過設定EditText的setTransformationMethod()方法來實現隱藏密碼或者顯示密碼。 示例程式碼如下: p

Vue實現動態顯示textarea剩餘字數

原文地址:http://www.jb51.net/article/114382.htm Vue實現動態顯示textarea剩餘文字數量,具體內容如下 這裡我們假設允許使用者輸入的最多數量為200個  html程式碼如下: ? 1 2 <t

Shine.js實現動態陰影效果

b2c ava .net fun text 動態 cti element gravity Shine.js 是一個用於實現美麗陰影的 JS 庫。 特性 1、可動態旋轉光的位置,投影出不同的陰影效果   2、可定制的陰影,   3、沒有庫依賴關系,AMD兼容使

jq實現動態粒子效果

tex ret padding 粒子 proto scrip rip [] 3D 在線上看到別人做的動態粒子,哇,太炫了,我也來試一試。 <!DOCTYPE html><html> <head> <meta charset="UT

android TextView實現滾動顯示效果(列表中多個同時滾動,親測可用)

 在android中,如果設定了TextView控制元件為單行顯示,且顯示的文字太長的話,預設情況下會造成顯示不全的情況,這種情況下我們需要設定該控制元件屬性如下: <TextView android:id="@+id/tv1"

Axure RP 7原型工具通過中繼器實現動態表格效果

一、新增控制元件 1、新增兩個文字控制元件分別為“姓名”、“Email” 2、新增兩個文字框控制元件分別命名為"inputTextName"、“inputEmailText” 3、新增一個按鈕控制元件“提交” 4、新增一個表格空間,只要頭,將頭下面的單元格刪掉 5、新增一箇

翻翻git---自定義View實現水位上漲效果 WaveProgressView

P1 (廢話部分,技術內容在P2) 上週陸續收到一些想嘗試性換工作的小夥伴們的簡歷,相關的負責的HR妹子已經電話轟炸過去了,如果有興趣的小夥伴可以看下http://blog.csdn.net/ddwhan0123/article/details/507

STM32CubeMX學習教程五:PWM實現呼吸燈效果

完整原始碼下載:https://github.com/simonliu009/STM32CubeMX-PWM-Output軟體:STM32CubeMX V4.25.0  System Workbench V2.4韌體庫版本:STM32Cube FW_F1 V1.6.1硬體:O

Openlayers4中實現動態效果

概述:本文講述如何結合canvas在Openlayers4中實現動態線的效果。效果:程式碼:1、move-line擴充套件(function (global, factory) { typeof exports === 'object' && type

Android快速實現動態模糊效果

寫在前面現在,越來越多的App裡面使用了模糊效果,這種模糊效果稱之為高斯模糊。大家都知道,在Android平臺上進行模糊渲染是一個相當耗CPU也相當耗時的操作,一旦處理不好,卡頓是在所難免的。一般來說,考慮到效率,渲染一張圖片最好的方法是使用OpenGL,其次是使用C++/C

Android開發解析XML並實現三級聯動效果

       本例項主要應用XmlPullParser解析XML文件中的省市區,然後將資料繫結到Spinner上實現三級聯動的效果。關於XmlPullParser的詳解大家可以參考《Android開發之使用PULL解析和生成XML》一文。 執行效果圖: 程式程式碼: 核