日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT旋转按钮控件的实现

發布時間:2025/3/20 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT旋转按钮控件的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

          • 一、實現需求:鼠標hover時旋轉
          • 二、實現方式:計時器做動畫
          • 三、代碼實現


QT旋轉按鈕控件的實現
一、實現需求:鼠標hover時旋轉

需求是:實現類似于WINDOWS下,某些軟件窗口關閉按鈕的樣式,

比如下圖:WINDOWS某訊電腦管家的關閉按鈕,鼠標hover時的效果,鼠標松開時的效果,目前沒有要求,也就沒實現,但是實現的原理的一樣的

實現后的效果如下圖:

二、實現方式:計時器做動畫

PS:這里僅僅講述旋轉的實現,對于按鈕:default樣式,hover樣式,click樣式不做介紹;如果有更好的方式,希望大佬不吝賜教。
方法:
1、使用計時器;每隔一定的時間旋轉一定的角度(當前是)
2、到達一定的角度后不再旋轉,還原(當前是 90°就停止還原)
3、鼠標 hover 的時候,開始計時,旋轉

三、代碼實現

代碼不全,但是依舊能夠理解大概思想。

按鈕使用的 QLabel 控件

CloseButton::CloseButton(QWidget *parent): QLabel(parent) {// 其它操作..................default_closePix = QIcon(":/image/ukui-taskview-close-default.png").pixmap(btnSize.width(), btnSize.width());hover_closePix = QIcon("://image/ukui-taskview-close-hover.png").pixmap(btnSize.width(), btnSize.width());click_closePix = QIcon(":/image/ukui-taskview-close-click.png").pixmap(btnSize.width(), btnSize.width());m_pCircleTimer = new QTimer(this);m_pCircleTimer->setInterval(50);connect(m_pCircleTimer, &QTimer::timeout, this, &CloseButton::onTimeout); } void CloseButton::btnStateEnter() {startCircle();setPixmap(hover_closePix);raise();return; }

重點在于 m_nAngle 這個角度值的改變

void CloseButton::paintEvent(QPaintEvent *event) {if (BTN_STATE_ENTER == m_btnState){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 反鋸齒;painter.setPen(Qt::transparent);QRect rect = this->rect();rect.setWidth(rect.width());rect.setHeight(rect.height());painter.translate(btnSize.width() / 2, btnSize.height() / 2); // 設置旋轉中心painter.rotate(m_nAngle); // 旋轉painter.translate(-(btnSize.width() / 2), -(btnSize.height() / 2)); // 將原點復位painter.drawPixmap(rect, hover_closePix);} else {QLabel::paintEvent(event);} }void CloseButton::startCircle() {m_pCircleTimer->start(); }

倒計時結束

void CloseButton::onTimeout() {++m_nCirleCount;if(m_nAngle == 90) // 旋轉 90度{m_nAngle = 0;}m_nAngle += 15 ;if(m_nCirleCount == 6){m_pCircleTimer->stop();m_nCirleCount = 0;}update(); } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的QT旋转按钮控件的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。