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

首頁 > 編程 > C > 正文

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

2020-01-26 13:40:30
字體:
來源:轉載
供稿:網友

一、效果展示

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

圖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);}

四、demo程序

動畫提示框

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看你懂的| 欧美日韩国产123| 国产精品久久久久久久午夜| 精品丝袜一区二区三区| 国产视频精品免费播放| 青草青草久热精品视频在线观看| 国产午夜精品免费一区二区三区| 日韩精品视频在线免费观看| 欧美多人乱p欧美4p久久| 久久久久久久久久久久久久久久久久av| 国产欧美精品xxxx另类| 亚洲精品国产精品自产a区红杏吧| 91色视频在线导航| 日韩综合视频在线观看| 精品一区二区电影| 97国产精品久久| 国产精品成av人在线视午夜片| 性金发美女69hd大尺寸| 日韩精品www| 亚洲日本成人女熟在线观看| 欧美亚州一区二区三区| 懂色av影视一区二区三区| 日韩av免费一区| 亚洲精品日韩丝袜精品| 精品中文视频在线| 狠狠综合久久av一区二区小说| 中文欧美在线视频| 久久不射电影网| 色偷偷91综合久久噜噜| 亚洲国产精品yw在线观看| 日韩av免费观影| 日韩高清免费观看| 在线播放日韩欧美| 国产欧美日韩综合精品| 午夜精品福利在线观看| 亚洲女人被黑人巨大进入al| 国产精品久久一区| 永久免费毛片在线播放不卡| 日韩精品一区二区三区第95| 国产成人久久久精品一区| 欧美高清理论片| 66m—66摸成人免费视频| 日韩在线观看你懂的| 久久久久久久久久国产精品| 国自在线精品视频| 日韩精品免费在线视频观看| 成人在线视频网| 久久久久久久久中文字幕| 91系列在线观看| 国产精品人成电影在线观看| 国产精品香蕉国产| 日韩国产欧美区| 国产成人综合亚洲| 97精品在线视频| 成人在线播放av| 欧亚精品在线观看| 久久精品一本久久99精品| 日韩免费黄色av| 久久在线观看视频| 国产精品免费视频久久久| 亚洲国产一区二区三区在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 成人激情视频免费在线| 欧美视频中文字幕在线| 日韩在线国产精品| 欧美成人性色生活仑片| 欧美激情亚洲一区| 91亚洲一区精品| 国产日韩精品在线播放| 青青在线视频一区二区三区| 91精品国产综合久久香蕉922| 亚洲人成网站在线播| 国产成人精品在线观看| 国产精品一二区| 国产精品ⅴa在线观看h| 国产精品1234| 欧美洲成人男女午夜视频| 亚洲影视中文字幕| 国产精品久久久久久亚洲调教| 亚洲va欧美va在线观看| 91视频国产精品| 欧美成人在线影院| 国产精品h片在线播放| 成人有码在线播放| 亚洲色图偷窥自拍| 日韩欧美黄色动漫| 三级精品视频久久久久| 日韩欧美精品网址| 成人免费激情视频| 久久成人人人人精品欧| 日韩av中文在线| 国产精品88a∨| 久久久999精品视频| 啊v视频在线一区二区三区| 久久久人成影片一区二区三区观看| 欧美视频一区二区三区…| 国产精品久久77777| 亚洲一区二区三区xxx视频| 国产精品视频网| 在线观看免费高清视频97| 国产日韩欧美综合| 日韩成人免费视频| xx视频.9999.com| 日韩在线视频国产| 色哟哟入口国产精品| 国产午夜一区二区| 亚洲最大av在线| 亚洲美女福利视频网站| 日韩av在线最新| 国产精品麻豆va在线播放| 久久久精品美女| 欧美一区二粉嫩精品国产一线天| 91黑丝高跟在线| 亚洲精品成人网| 国产欧美精品一区二区三区-老狼| 欧美日韩国产成人高清视频| 日韩免费在线播放| 国产精品免费一区| 国产日韩换脸av一区在线观看| 亚洲bt天天射| 久久亚洲欧美日韩精品专区| 91在线高清免费观看| 黄色成人在线播放| 欧美午夜激情在线| 97婷婷涩涩精品一区| 欧美精品电影免费在线观看| 日韩综合视频在线观看| 欧美亚洲国产视频| 伦伦影院午夜日韩欧美限制| 亚洲欧洲一区二区三区久久| 2019中文字幕在线观看| 不卡在线观看电视剧完整版| 色妞欧美日韩在线| 992tv在线成人免费观看| 久久亚洲国产精品| 福利一区福利二区微拍刺激| 久久久国产精彩视频美女艺术照福利| 97超级碰碰人国产在线观看| 日韩视频在线免费| 国产一区欧美二区三区| 国产精品18久久久久久麻辣| 亚洲免费福利视频| 97在线观看免费| 久久成人18免费网站| 91精品国产色综合久久不卡98| 91精品久久久久久久久| 成人在线视频网| 亚洲免费一在线| 久久激情视频免费观看| 久久免费少妇高潮久久精品99| 久久精品人人做人人爽| 亚洲欧美视频在线| 久热在线中文字幕色999舞| 日韩网站免费观看高清| www.美女亚洲精品| 国产精品亚发布| 国产自摸综合网| 亚洲永久免费观看| 亚洲国产精品一区二区三区| 亚洲成人精品久久| 国产精品视频一区二区三区四| 国产精品吊钟奶在线| 国产精品高潮呻吟久久av无限| 成人在线一区二区|