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》一文。 執行效果圖: 程式程式碼: 核