亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

Qt學習教程之對話框消失動畫效果

2020-05-23 13:29:21
字體:
來源:轉載
供稿:網友

一、效果展示

最近做了一個提示框消失的功能,覺著挺有意思,以前一直以為Qt子窗口不能做淡出效果,其實Qt的淡出功能已經幫我們封裝好了,我們僅僅只需要幾行代碼就可以做出酷炫的窗口關閉效果,寫此篇文章的時候,我特意瀏覽了下之前寫的兩篇文章(QPainterPath 不規則提示框,QPainterPath 不規則提示框(二)),現在回想起來那會兒確實知之甚少,關于頂層窗口不能做圓角,其實幫助文檔里已經說的很明確,解決辦法有多種,一種是重寫paintEvent函數,另一種是把widget包裝一層,本篇文章就用的是后一種方式,如圖1所示窗口關閉動畫,實例程序中做了淡出、飛出、縮小等關閉窗口動畫,除此之外還包含了陰影、背景著色、濾鏡等特效。

Qt,對話框,消失動畫

圖1 窗口特效

二、功能

如圖1窗口特效所示,實例中總共包含了4個groupbox,這4個groupbox是分別用來展示不同特效,下面分別講述4個groupbox

  • 背景色:主要針對窗口背景色進行了定制,就像groupbox中按鈕文字那樣,是紅色和綠色的背景提示框,其中紅色提示框使用了最小化關閉效果,綠色提示框使用了淡出特效
  • 飛出:這4個按鈕彈出的對話框都使用了飛出特效,4個按鈕分別展示了4種飛出的方式(左、上、右、下)
  • 自定義:支持自定義提示框別景色、提示框展示時長、消失動畫時長和消失模式
  • shortcut:主要是針對業務進行的功能定制,warning提示框體的圖標是進行單獨處理的,是一個嘆號圖標

三、代碼實現

在講解代碼之前,先來認識幾個概念

  • QPropertyAnimation:屬性動畫,可以參考qt 窗口動畫
  • QGraphicsOpacityEffect:窗口透明度設置類,繼承自QGraphicsEffect
  • QGraphicsDropShadowEffect:窗口陰影,繼承自QGraphicsEffect
  • QGraphicsBlurEffect:濾鏡,繼承自QGraphicsEffect
  • QGraphicsColorizeEffect:著色,繼承自QGraphicsEffect

1、移出動畫,使用屬性動畫QPropertyAnimation類進行,propertyname的參數是窗口的屬性,詳情參見Q_PROPERTY屬性 。targetObject對象設置為this內部單獨封裝的widget,這樣做的目的使得該提示框不需要依賴其他窗口遮擋即可做出飛出效果

void GMPOperateTip::MoveOut(){ m_pAnimation->setTargetObject(m_pMoveWidget); m_pAnimation->setPropertyName("pos"); m_pAnimation->setStartValue(QPoint()); switch (m_eDirection) { case D_LEFT:  m_pAnimation->setEndValue(QPoint(-width(), 0));  break; case D_TOP:  m_pAnimation->setEndValue(QPoint(0, -height()));  break; case D_RIGHT:  m_pAnimation->setEndValue(QPoint(width(), 0));  break; case D_BOTTOM:  m_pAnimation->setEndValue(QPoint(0, height()));  break; default:  ; }}

2、淡出

m_pOpacity = new QGraphicsOpacityEffect(this);m_pOpacity->setOpacity(1);setGraphicsEffect(m_pOpacity);m_pAnimation->setTargetObject(m_pOpacity);m_pAnimation->setPropertyName("opacity");m_pAnimation->setStartValue(1);m_pAnimation->setEndValue(0);

3、最小化

m_pAnimation->setPropertyName("geometry");QRect startRect = rect();startRect.moveTo(pos());QRect stopRect = QRect(startRect.center(), QSize(0, 0));m_pAnimation->setStartValue(startRect);m_pAnimation->setEndValue(stopRect);

4、動畫啟動機制

使用定時器控制動畫,當指定時間后啟動動畫,并且在動畫完成后關閉窗口

void InitializeConnect(){ m_pAnimation = new QPropertyAnimation(this); m_pAnimation->setTargetObject(this); connect(m_pAnimation, &QPropertyAnimation::finished, this, &GMPOperateTip::close); connect(&m_StayTimer, &QTimer::timeout, this, [this]{  m_pAnimation->setDuration(m_DurationTime);  switch (m_eMode)  {  case AM_FADEOUT:   FadeOut_p();   break;  case AM_FLYOUT:   MoveOut();   break;  case AM_ZOOMIN:   ZoomIn();   break;  default:   ;  }  m_pAnimation->start(); });}

窗口顯示時啟動定時器,并且將窗口隨機移動到屏幕一個位置

bool event(QEvent * e){ if (e->type() == QEvent::Show) {  //QPoint pos = parentWidget()->rect().center() - this->rect().center();  int wrand = qrand() % (parentWidget()->rect().width() - this->rect().width());  int hrand = qrand() % (parentWidget()->rect().height() - this->rect().width());  move(QPoint(wrand, hrand));  m_StayTimer.start(m_iStayDuration); } return __super::event(e);}

5、陰影

void setShadowEnable(bool enable){ if (!m_pShadow) {  m_pShadow = new QGraphicsDropShadowEffect(this);  m_pShadow->setColor(QColor(0, 0, 0, 85));  m_pShadow->setBlurRadius(10);  m_pShadow->setOffset(4, 4); } setGraphicsEffect(enable ? m_pShadow : nullptr);}

6、著色

注釋中的代碼也可以進行著色,但是窗體的一些特殊樣式不能完成,因此使用stylesheet來完成背景色修改

 static const QString c_szStyleSheet = "QWidget{background-color:%1;/          border:1px solid %2;border-top:0;border-bottom-left-radius:3px;/          border-bottom-right-radius:3px;background-image: url();}";
void GMPOperateTip::setBackgroundColor(const QColor & color){ //if (!m_pColorize) //{ // m_pColorize = new QGraphicsColorizeEffect(this); // m_pColorize->setStrength(1); //  // setGraphicsEffect(m_pColorize); //} //m_pColorize->setColor(color); QColor border = color; border.setAlpha(255 * 0.1); QString borderRgba = QString("rgba(%1,%2,%3,%4)").arg(border.red()).arg(border.green()).arg(border.blue()).arg(border.alpha()); setStyleSheet(c_szStyleSheet.arg(color.name()).arg(borderRgba));}

 7、快捷調用接口,該接口都是類的靜態方法可以直接調用

8、測試,由于測試代碼較多,我只貼出2個

void tip::on_pushButton_success_clicked(){ GMPOperateTip::Success(this, QStringLiteral("測a試º?,ê?測a試º?"), 1000, 1000);}void tip::on_pushButton_warning_clicked(){ GMPOperateTip::Waring(this, QStringLiteral("測a試º?,ê?測a試º?"), 1000, 1000);}

 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品va在线看黑人| 韩国一区二区电影| 亚洲wwwav| www.欧美视频| 日韩中文字幕免费视频| 久久久久国产精品一区| 久久精彩免费视频| 热草久综合在线| 亚洲国产精彩中文乱码av| 欧美肥老妇视频| 久久99久久亚洲国产| 中文字幕亚洲综合久久筱田步美| 久久精品中文字幕| 国产精品999999| 国产精品免费一区二区三区都可以| 亲爱的老师9免费观看全集电视剧| 欧美一区深夜视频| 欧美激情视频在线观看| 一区二区三区美女xx视频| 成人免费视频xnxx.com| 久久精品国产亚洲| 欧美成年人网站| 欧美亚洲在线播放| 国产色视频一区| 91精品久久久久久久久中文字幕| 国产一区二区三区视频| 久久精品视频va| 日韩欧美在线字幕| 国产一区二区三区毛片| 亚洲老头同性xxxxx| 亚洲一二在线观看| 欧美成aaa人片免费看| 国产精品视频免费在线| 欧美大片大片在线播放| 国产精品一区二区三区久久| 亚洲www在线| 欧美一级视频在线观看| 乱亲女秽乱长久久久| 热99精品只有里视频精品| 色偷偷亚洲男人天堂| 亚洲国产成人精品一区二区| 国产主播喷水一区二区| 日韩欧美国产视频| 国产精品久久久久久久电影| 国产午夜精品久久久| 亚洲精品自拍第一页| 亚洲人线精品午夜| 国产午夜精品全部视频播放| 久久久久久久久网站| 国产精品久久999| 日韩av电影手机在线观看| 欧美精品在线免费播放| 91视频免费在线| 欧美性xxxx在线播放| 6080yy精品一区二区三区| 97国产精品免费视频| 一区二区三区美女xx视频| 亚洲www永久成人夜色| 亚洲精品国产综合久久| 日韩中文字幕视频在线| 欧美日韩中国免费专区在线看| 国产精品www色诱视频| 欧美性开放视频| 青草成人免费视频| 精品国模在线视频| 国产精品丝袜视频| 在线播放日韩专区| 国产丝袜一区二区| 成人av在线网址| 96精品久久久久中文字幕| 日本人成精品视频在线| 国产福利精品在线| 国产视频精品免费播放| 日本乱人伦a精品| 深夜福利一区二区| 最好看的2019年中文视频| 久久精品电影一区二区| 亚洲午夜久久久久久久| 亚洲视频自拍偷拍| 欧美亚洲在线观看| 亚洲第一视频网站| 欧美一性一乱一交一视频| 亚洲人成在线电影| 亚洲天堂视频在线观看| 久久国产精品电影| 国产精品一二三在线| 国产美女91呻吟求| 亚洲精品视频在线播放| 一区二区三区视频在线| 日韩视频在线免费| 91日本在线观看| 中文字幕无线精品亚洲乱码一区| 91久久精品日日躁夜夜躁国产| 亚洲国产成人一区| 黑人巨大精品欧美一区免费视频| 欧美另类交人妖| 国产免费一区二区三区在线观看| 欧美一级电影免费在线观看| 欧美在线视频观看| 日韩精品中文字幕视频在线| 久久精品视频在线| 亚洲精品有码在线| 97成人精品视频在线观看| 亚洲国产成人精品久久| 欧美另类极品videosbest最新版本| 一个人www欧美| 精品在线观看国产| 国产精品jizz在线观看麻豆| 91免费人成网站在线观看18| 亚洲美女视频网站| 97在线视频观看| 国产精品一区专区欧美日韩| 亚洲午夜小视频| 91久久精品国产91久久性色| 亚洲成人aaa| 国产精品久久久久久久久男| 亚洲国语精品自产拍在线观看| 欧美最猛性xxxxx亚洲精品| 亚洲区一区二区| 久久激情视频免费观看| 亚洲三级 欧美三级| 欧美日韩中文在线| 亚洲美女www午夜| 精品国产欧美一区二区五十路| 国产精品高潮呻吟久久av无限| 96sao精品视频在线观看| 尤物九九久久国产精品的分类| 国产欧美久久久久久| 亚洲欧美成人网| 亚洲国产欧美在线成人app| 自拍偷拍亚洲一区| 亚洲最新av网址| 国产成人拍精品视频午夜网站| 欧美巨乳美女视频| 456国产精品| 热久久视久久精品18亚洲精品| www.亚洲天堂| 第一福利永久视频精品| 日韩av手机在线看| 亚洲视频在线观看免费| 亚洲一区二区三区在线免费观看| 国产自摸综合网| 亚洲欧美精品一区| 国产精品啪视频| 国产一区二区三区在线| 国产丝袜一区视频在线观看| 欧美成人性生活| 日韩黄色在线免费观看| 日韩中文字幕网址| 2020久久国产精品| 国产精品一区二区三| 51ⅴ精品国产91久久久久久| 亚洲人成自拍网站| 欧美插天视频在线播放| 久久精品这里热有精品| 精品久久久久久久大神国产| 欧美黑人又粗大| 国产精品久久久久久久久久新婚| 亚洲激情 国产| 亚洲一区二区三区在线免费观看| 亚洲aaa激情| 亚洲精品中文字幕av| 91久久中文字幕| 日韩av黄色在线观看|