Qt 旋轉動畫(純程式碼)
簡述
初嘗QT不甚歡喜,CSDN上有非常多的朋友在為QT做出貢獻,我也願意以主觀角度來分享QT,讓QT變得更好。
該原始碼系作者個人撰寫,使用時請尊重作者,不要隨意篡改關於作者的資訊。
獲取方式
為了讓你我都能得到提升,請您在評論區留下對我的建議,並附上您可愛的郵箱,我將給您送上原始碼。
效果展示
原始碼
#ifndef CUSTOMPROGRESSINDICATOR_H #define CUSTOMPROGRESSINDICATOR_H #include <QWidget> #include <QColor> /* * 菊花轉 進度類,基於程式碼無需圖片資源 * 作者:陳魯勇 * 郵箱:
[email protected] * 建立時間:2017年2月10日16:26:48 * QT版本:5.0.2 * CSDN:http://blog.csdn.net/csnd_ayo * ************************************** * 說明: * 使用前請確保在QT.pro中加入 C++11 的支援 * * 示例程式碼: pIndicator = new CustomProgressIndicator(this); pIndicator->setColor(Qt::red); pIndicator->startAnimation(); */ class CustomProgressIndicator : public QWidget { Q_OBJECT Q_PROPERTY(int delay READ animationDelay WRITE setAnimationDelay) Q_PROPERTY(bool displayedWhenStopped READ isDisplayedWhenStopped WRITE setDisplayedWhenStopped) Q_PROPERTY(QColor color READ color WRITE setColor) public: CustomProgressIndicator(QWidget* parent = 0); int animationDelay() const { return delay_; } /* 動畫是否正在進行中 */ bool isAnimated () const; /* 動畫完畢後,是否隱藏菊花轉 */ bool isDisplayedWhenStopped() const; /* 當前菊花轉的顏色 */ const QColor & color() const { return color_; } /* 虛擬函式:當前大小 */ virtual QSize sizeHint() const; void setBackground(const QString& _icon) { currentPix_ = QPixmap(_icon); } signals: void Finished(void); public slots: /* 開始動畫 */ void startAnimation(); /* 停止動畫 */ void stopAnimation(); /* 設定菊花轉的轉速 */ void setAnimationDelay(int delay); /* 動畫完畢後,是否隱藏菊花轉 */ void setDisplayedWhenStopped(bool state); /* 設定菊花轉顏色 */ void setColor(const QColor & color); /* * 進度 * 引數 _progress:當前進度 0 < _progress < 100 */ void onProgress(short _progress) { progress_ = _progress; } protected: /* 系統基類函式 */ virtual void timerEvent(QTimerEvent * event); virtual void paintEvent(QPaintEvent * event); private: /* 角度 */ unsigned int angle_; /* 定時器ID */ int timerId_; /* 轉速 */ int delay_; /* 是否隱藏 */ bool displayedWhenStopped_; /* 菊花轉顏色 */ QColor color_; /* 進度 */ short progress_; /* 背景圖 */ QPixmap currentPix_; }; #endif // CUSTOMPROGRESSINDICATOR_H
#include "customprogressindicator.h" #include <QPainter> CustomProgressIndicator::CustomProgressIndicator(QWidget* parent) : QWidget(parent), angle_(0), timerId_(-1), delay_(20), displayedWhenStopped_(false), color_(Qt::green) { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); setFocusPolicy(Qt::NoFocus); } bool CustomProgressIndicator::isAnimated () const { return (timerId_ != -1); } void CustomProgressIndicator::setDisplayedWhenStopped(bool state) { displayedWhenStopped_ = state; update(); } bool CustomProgressIndicator::isDisplayedWhenStopped() const { return displayedWhenStopped_; } void CustomProgressIndicator::startAnimation() { angle_ = 0; if (timerId_ == -1) { timerId_ = startTimer(delay_); } } void CustomProgressIndicator::stopAnimation() { if (timerId_ != -1) { killTimer(timerId_); } timerId_ = -1; update(); } void CustomProgressIndicator::setAnimationDelay(int delay) { if (timerId_ != -1){ killTimer(timerId_); } delay_ = delay; if (timerId_ != -1){ timerId_ = startTimer(delay_); } } void CustomProgressIndicator::setColor(const QColor & color) { color_ = color; update(); } QSize CustomProgressIndicator::sizeHint() const { return QSize(25,25); } void CustomProgressIndicator::timerEvent(QTimerEvent * /*event*/) { angle_ = (angle_+30)%360; update(); } void CustomProgressIndicator::paintEvent(QPaintEvent * /*event*/) { QPainter p(this); p.setRenderHint(QPainter::Antialiasing); if (!displayedWhenStopped_ && !isAnimated()) { p.drawPixmap(rect(),currentPix_); return; } int width = qMin(this->width(), this->height()); int outerRadius = (width-1) >> 1; int innerRadius = ((width-1) >> 1)*0.38; int capsuleHeight = outerRadius - innerRadius; int capsuleWidth = (width > 32 ) ? capsuleHeight *.23 : capsuleHeight *.35; int capsuleRadius = capsuleWidth >> 1; /* 撰寫進度 */ if (progress_ > 0 && progress_ < 100) { p.setPen(color_); p.drawText(rect(), Qt::AlignCenter, QString("%1%").arg(progress_)); } else if (progress_ == 100) { stopAnimation(); } for (int i=0; i<12; ++i) { QColor color = color_; color.setAlphaF(1.0f - (i/12.0f)); p.setPen(Qt::NoPen); p.setBrush(color); p.save(); p.translate(rect().center()); p.rotate(angle_ - i*30.0f); p.drawRoundedRect(((-capsuleWidth) >> 1), -(innerRadius+capsuleHeight), capsuleWidth, capsuleHeight, capsuleRadius, capsuleRadius); p.restore(); } }
相關推薦
Qt 旋轉動畫(純程式碼)
簡述 初嘗QT不甚歡喜,CSDN上有非常多的朋友在為QT做出貢獻,我也願意以主觀角度來分享QT,讓QT變得更好。 該原始碼系作者個人撰寫,使用時請尊重作者,不要隨意篡改關於作者的資訊。 獲取方式 為了讓你我都能得到提升,請您在評論區留下對我的建議,並附上您可愛的郵箱,
Qt開場動畫(gif效果)的實現
Qt自己提供了一個開場動畫的類QSplashScreen,可以實現簡單的圖片開場的效果,但是是靜態的圖片。 Qt播放gif格式圖片是利用的QMovie實現的。因此利用QMoviee和QTimer,每隔一段時間將QSplashScreen重繪一次,來實現gi
實現數字手寫圖片識別(純程式碼)
假設環境都OK import scipy.special class NeuralNetWork: def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate): #初始化網路
每天一個數據結構----佇列的順序儲存結構實現(純程式碼)
// // main.c // Queue 迴圈佇列 // // // Created by Jacobs.Guo on 2018/5/7. // Copyright © 2018年 yage guo. All rights reser
每天一個數據結構----棧的鏈式儲存結構實現(純程式碼)
// // main.c // StackList2 棧的鏈式儲存結構 // // Created by Jacobs.Guo on 2018/4/23. // Copyright © 2018年 yage guo. All rights
漢諾塔C語言實現(純程式碼)
(本篇只為記錄程式碼,不加註解)a、b、c三座塔,將n個從小到大(自上而下)的圓盤從a移動到c,移動期間小圓盤必須在大圓盤上面,問移動步驟。#include<stdio.h> int main() { void hanoi(int n,char one
Qt佈局管理: 分割視窗QSplitter類講解(純程式碼實現分割視窗)
一個QSplitter是一個可以包含其他控制元件的控制元件,這些控制元件被一個分隔條隔開,託拽這個分隔條,可以改變splitter的子控制元件的大小。 QSplitter控制元件經常做為佈局管理器使用
Qt佈局管理: 停靠視窗QDockWidget類(純程式碼實現)
(注:以下解釋是我自己的翻譯,由於英文水平有限,望海涵) 詳細描述: QDockWidget類提供了一個窗體部件,其可以停靠在QMainWindow,或其本身作為一個在桌面上的頂級視窗(也就是父窗體
Silverlight & Blend動畫設計系列二:旋轉動畫(RotateTransform)
target width duration pac 操作 縮放 () rop pri Silverlight的基礎動畫包括偏移、旋轉、縮放、傾斜和翻轉動畫,這些基礎動畫毫無疑問是在Silverlight中使用得最多的動畫效果,其使用也是非常簡單的。相信看過上一篇《偏移動畫(
C# GDI繪製儀表盤(純程式碼實現)
純程式碼實現GDI繪製儀表盤,效果在程式碼下面。public partial class HalfDashboardUc : UserControl { /// <summary> /// 儀表盤背景圖片 /// </summar
UICollectionView(純程式碼方式)實現帶上下拉重新整理的瀑布流式
瀑布流(WaterFlow)是專案開發過程中的常見佈局,有關於瀑布流(WaterFlow)的實現方式:在UICollectionView未出現之前,瀑布流的實現多半是採用UIScrollView或是UITableView。對於我們這種用慣了表檢視的人來說,UIC
Qt 幀動畫 (QWidget)
引言 動畫很讓人煩惱,在Qt中,已經給出了很多簡單的動畫,例如 QPropertyAnimation 類實現的動畫,但是還不夠智慧,不是我想要的,相信你也有同感,今天我們就來實現自定義動畫類來方便我們日後的開發。 簡介 作業系統:windo
滑鼠懸停旋轉的圖示按鈕特效(純CSS)
效果圖如下: CSS如下: <style type="text/css"> @font-face { font-family: 'Material Icons'; font-style: normal; font-weight: 400; s
Shader toy (順手寫兩個Gyro)(純程式碼寫3D)
Shader toy (A new world) 1.一個多月了,突然忘記CSDN的密碼了,因為每次輸密碼的時候都要計算一遍,於是沒有計算出來… 2.回頭發現都過了半年了,都快捏了一把汗,這百度何時不那麼踉踉蹌蹌,搜尋服務一直那麼差,百度網速又不給力了。
c/c++常用程式碼之四爆炸輸出,jason(純乾貨)
常用程式碼之四:建立jason,jason轉換為字串,字串轉換回jason,c#反序列化jason字串的幾個程式碼片段 建立j
Android 屬性動畫(Property Animation) 全然解析 (上)
顏色 valid 全部 加速度 ext target ng- 點擊 save 轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/380674751、概述Android提供了幾種動畫類型:View Anima
數字鍵盤(純js)
outb htm -a 字符 cit style elements nim 實現 實現的要求: 第一位不能是0 不能同時出現兩個"." 最後一位不能是"." 只能輸入n位小數 註意:在ios中input會出現光標,可以加上
單頁面跳轉添加返回和跳轉動畫(仿app) 只對單頁面和跳轉有用,我用的是angualr,有不會的可以私信問我。
hist page func margin consola color -s tar pla p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #596972 } p.p2 { mar
【UVA】1594 Ducci Sequence(純模擬)
i++ mar freopen esp abs mat ret code == 題目 題目 ? ? 分析 真的快瘋了,中午交了一題WA了好久,最後發現最後一個數據不能加\n,於是這次學乖了,最後一組不輸出\n,於是WA了好幾發,最後從Udebug發現最後一組是要輸出的!!
Qt學習總結(C魚)之信號與槽01
Qt 學習 總結 C魚 自動關聯 第一種自然是手動關聯了,只要調用connect函數就能實現自動關聯。這裏重點講第二種,自動關聯:為了實現槽函數自動進行關聯,對於Qt窗口部件已經提供的信號,可按照以下規範命名:void on_<窗口部件名稱>_<信號名