1. 程式人生 > >Qt動畫之滑鼠水滴點選效果

Qt動畫之滑鼠水滴點選效果

一、簡述

前幾天在群裡看見有個小夥伴用的一款gif錄屏軟體有一個類似水滴的點選效果。於是想了想,便開始了Code。思路也很簡單,就是藉助Qt的動畫類QVariantAnimation然後不斷重繪達到點選的動畫效果,先看一下效果圖。

這裡寫圖片描述

這裡寫圖片描述

二、程式碼之路

WaterDrop.h

#include <QtWidgets/QWidget>
#include <QVariantAnimation>

class WaterDrop : public QWidget
{
    Q_OBJECT

public:
    WaterDrop(QWidget *parent = Q_NULLPTR);
    ~WaterDrop();
    void
show(); void move(const QPoint &point); void setColor(QColor color); private: void paintEvent(QPaintEvent *event); public slots: void onRaduisChanged(QVariant value); private: QVariantAnimation* m_waterDropAnimation; // 水滴變化的半徑; int m_animationRadius; // 水滴的顏色; QColor m_waterDropColor; };

WaterDrop.cpp

#include "WaterDrop.h"
#include <QPainter>

// 水滴的半徑;
#define WATER_DROP_RADIUS 15

WaterDrop::WaterDrop(QWidget *parent)
    : QWidget(parent)
    , m_waterDropAnimation(NULL)
    , m_animationRadius(0)
    , m_waterDropColor(QColor(255, 120, 0, 150))    // 預設為橘黃色;
{
    this->setFixedSize(QSize(WATER_DROP_RADIUS * 2
, WATER_DROP_RADIUS *2)); this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool); this->setAttribute(Qt::WA_TranslucentBackground); // 控制元件顯示完關閉後自動刪除; this->setAttribute(Qt::WA_DeleteOnClose); m_waterDropAnimation = new QVariantAnimation(this); } WaterDrop::~WaterDrop() { } void WaterDrop::move(const QPoint &point) { // 這裡要把滑鼠點選的點轉換為圓心點座標; QPoint translatePoint = point - QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS); __super::move(translatePoint); } void WaterDrop::show() { __super::show(); // 通過動畫類不斷進行重繪; m_waterDropAnimation->setStartValue(0); m_waterDropAnimation->setEndValue(WATER_DROP_RADIUS); m_waterDropAnimation->setDuration(350); connect(m_waterDropAnimation, &QVariantAnimation::valueChanged, this, &WaterDrop::onRaduisChanged); connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::close); m_waterDropAnimation->start(); } // 設定水滴的顏色; void WaterDrop::setColor(QColor color) { m_waterDropColor = color; } // 繪製滑鼠的水滴點選效果; void WaterDrop::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(QBrush(m_waterDropColor)); // 思路就是先繪製一個固定大小的圓A,然後繪製同一圓心的透明的圓B,然後通過動畫類是圓B的半徑從0增長到WATER_DROP_RADIUS,以致覆蓋固定的圓A; QPainterPath waterDropPath; waterDropPath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), WATER_DROP_RADIUS, WATER_DROP_RADIUS); QPainterPath hidePath; hidePath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), m_animationRadius, m_animationRadius); waterDropPath -= hidePath; painter.drawPath(waterDropPath); } void WaterDrop::onRaduisChanged(QVariant value) { // 不斷增加圓B的半徑值,並重繪; m_animationRadius = value.toInt(); update(); }

測試程式碼

// 新建一視窗類,重寫mousePressEvent事件即可;
void MyWidget::mousePressEvent(QMouseEvent *event)
{
    QPoint cursorPos = event->pos();
    qDebug() << "mousePressEvent" << cursorPos;

    WaterDrop* waterDrop = new WaterDrop();
    waterDrop->move(this->mapToGlobal(cursorPos));
    waterDrop->setColor(Qt::green);
    waterDrop->show();
}

後續會繼續分享Qt動畫類做出的一些動畫特效,敬請期待哈O(∩_∩)O!

支援一下,請點個贊吧!!!

程式碼下載

相關推薦

Qt動畫滑鼠水滴效果

一、簡述 前幾天在群裡看見有個小夥伴用的一款gif錄屏軟體有一個類似水滴的點選效果。於是想了想,便開始了Code。思路也很簡單,就是藉助Qt的動畫類QVariantAnimation然後不斷重繪達到點選的動畫效果,先看一下效果圖。 二、程式碼之路

Android原始碼解析--Material Design水波紋效果RippleEffect使用

好了,這樣差不多就完成了我們的水波漣漪效果了。。。。 看一下怎麼用吧? 如果你的開發IDE是Android Studio那麼我們可以把github上的庫整合到我們的專案中, <span style="font-size:14px;">dependencies {         comp

Android水波紋效果(RippleView)

Android5.0後各種炫的效果紛紛出來,寫這篇部落格主要是講的是按鈕點選效果帶有的水波紋(波浪式)。 當然我寫的這個是自定義來實現的,在低版本(5.0一下)也可以實現點選效果。看看效果圖:           上圖可看出 點選有抖動效果和不抖動效果。 佈局程式碼

Android學習Android 5.0分享動畫實現微信全屏效果

Android5.0過渡動畫,請看 今天用分享動畫實現微信點選全屏效果 本文原始碼下載地址 peizhi 配置 build.gradle: compile 'com.android.support:recyclerview-v7:23.

Android MaterialDesign水波效果的幾種實現方法

什麼是水波點選的效果? 下面是幾種不同的實現方法的效果圖以及實現方法   Video_2016-08-31_003846 如何實現? 方法一 使用

Android 養成記-1 --1.4 動畫系列 (選單側滑+圖示旋轉+dialog彈出+效果

選單側滑動畫 思想是佈局檔案裡,將選單欄跟內容欄放在同一個layout中,但是選單欄初始是隱藏狀態. 總佈局是線性水平佈局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

部落格園自定義頁面風格設計 後續篇(頁面設計模式及程式碼高亮 滑鼠效果升級)

前言 在之前所寫過的部落格園自定義頁面風格設計篇中,我們已經說明了其中兩種風格的頁面設計,滑鼠圖案的修改,公告欄的設定,背景音樂的製作,關於CSS以及用Canvas和requestAnimFrame做動畫特效,在本文中我們將教大家制作當前簡約的頁面製作方法。 只要你們有需求,我會盡量幫助到大家,在此感謝各

滑鼠懸停與效果

html程式碼 正常效果 點選效果 <a class="btn-v2 short-full-screen-v2 btn-none-v2" href="#"><i class="icon-short-full-screen" style="margi

Android TextView的效果改變背景顏色

在學習Android過程中,我們有時想要TextView有點選效果,不是文字的變化而是背景顏色的變化,那麼怎麼來實現呢? 下面將介紹如何實現: 1.在res目錄下的drawable(此檔案是自己手動建立的)檔案下建立一個點選效果的檔案:tv_bg_selector.xml

自定義控制元件ImageView實現之後有陰影效果

今天美工 直接給我一張圖片, 要我實現圖片點選之後有陰影效果, 當時想到了ImageButton, 隨即自己寫了個Demo, 發現ImageButton繼承ImageView 會有一個預設的背景樣式;而且在佈局中設計src(前景) 太醜, 於是,自己寫了個自定義控制元件Im

Android自定義View效果

最近在做新版本,各種UI效果都需要自定義,而自定義View點選效果問題一直困擾著我。各種找資料也沒有找到自己想要的東西,可能是我關鍵字打的不對吧。最後在檢視TextView的原始碼時解決了我的問題,由於原始碼功能太多,不易查詢,特此提取記錄。 UI效果

Android在xml中設定元件風格(圓角,效果selector,邊框,進度條風格,動畫)TextView文字透明度

在標題中寫到的元件的特效,都是在xml中為元件定義的 步驟: 1.在drawable下建立“Drawable resource file”,命名為:btn_corners(表示功能:圓角button) 2.在btn_corners.xml檔案中寫入程式碼如下 3.TextV

Android中的Button自定義效果改變時按鈕的顏色

在Android中定義按鈕的點選效果可以通過自定義selector,通過設定兩張不同的背景圖片來改變點選時和未點選時的狀態,但有時候僅僅只想改變點選時按鈕的顏色,但是在selector中並不能直接定義顏色。下面程式碼實現一個點選按鈕時僅僅改變按鈕顏色。 1.

Qt 動畫QPropertyAnimation

rect() 定義 () val valueat idt duration width 時間 1 //定義 2 QPropertyAnimation* _pAnimation= new QPropertyAnimation(this, "geometry"); 3

Android按鍵防止過快的方法

public class UtilFastClick { // 兩次點選按鈕之間的點選間隔不能少於1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastCl

html圖片按鈕&按鈕效果

} /** * 按鈕樣式 */ /* Radomir */ .ripple { position: relative; /*//隱藏溢位的徑向漸變背景*/ overflow: hidden; } .ripp

android:多次效果實現

public class MainActivity extends AppCompatActivity{ private final static int COUNTS = 5;//點選次數 private final static long VALIDTIME = 1300;/

Android設定常見控制元件效果

一. Imageview的點選效果——圖片稍微變暗突出點選效果 public class ClickImageView extends AppCompatImageView { public ClickImageView(Context context) { super(context);

選單新增效果

css: li.active a{     color: #FFCC00;     border-bottom:2px solid #FFCC00 ;     padding-bottom: 6px; }

Android水波紋效果

轉:Android水波紋點選效果 Android API 21及以上新增了ripple標籤用來實現水波紋的效果。我們可以通過設定ripple背景來實現一些View點選效果。 水波紋樣圖 1. 水波紋效果實現 1)系統效果 系統有界效果 在API 21以上使用,才有波紋效果;