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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt QWidget实现消息提示控件TipsWidget

發布時間:2025/1/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt QWidget实现消息提示控件TipsWidget 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

用Qt實現一個消息提示控件,控件寬度會根據顯示的內容多少來動態伸展,控件顯示三秒鐘過后會自動漸變透明度然后最終消失,這有點類似于Android的Toast控件,都是用于消息短暫提示。

源碼

頭文件

#include <QWidget> #include <QLabel> #include <QPaintEvent> #include <QTimer>class TLTipsWidget : public QWidget {Q_OBJECT public:explicit TLTipsWidget(QWidget *parent = 0);~TLTipsWidget();void setText(const QString & text); protected:void paintEvent(QPaintEvent *e);void showEvent(QShowEvent *e); signals:private slots:void onTimerStayOut();void onTimerCloseOut();//漸變后隱藏 private:QLabel* m_pLabel;QTimer * m_pTimer;QTimer * m_pCloseTimer;qreal m_dTransparent; };

源文件

#include "tltipswidget.h" #include <QPainter>TLTipsWidget::TLTipsWidget(QWidget *parent) :QWidget(parent),m_pLabel(NULL),m_pTimer(NULL),m_pCloseTimer(NULL),m_dTransparent(1.0) {this->setFixedHeight(55);m_pLabel = new QLabel(this);m_pLabel->setFixedHeight(55);m_pLabel->move(0,0);m_pLabel->setAlignment(Qt::AlignCenter);m_pLabel->setStyleSheet("color:white");this->hide();this->setWindowFlags(Qt::FramelessWindowHint);this->setAttribute(Qt::WA_TranslucentBackground,true);m_pTimer = new QTimer();m_pTimer->setInterval(3000);m_pCloseTimer = new QTimer();m_pCloseTimer->setInterval(20);connect(m_pTimer,&QTimer::timeout,this,&TLTipsWidget::onTimerStayOut);connect(m_pCloseTimer,&QTimer::timeout,this,&TLTipsWidget::onTimerCloseOut); }TLTipsWidget::~TLTipsWidget() {delete m_pTimer;delete m_pCloseTimer; }void TLTipsWidget::setText(const QString &text){QFontMetrics fm(this->font());int width = fm.width(text) * 1.2;this->setFixedWidth(width);m_pLabel->setFixedWidth(width);this->m_pLabel->setText(text);this->show();m_pTimer->start(); }void TLTipsWidget::paintEvent(QPaintEvent *e) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setPen(Qt::NoPen);painter.setBrush(QColor(0,0,0,180));painter.drawRoundedRect(rect(),5,5);QWidget::paintEvent(e); }void TLTipsWidget::showEvent(QShowEvent *e) {QTimer::singleShot(2500,this,SLOT(hide()));this->move(parentWidget()->width() / 2 - this->width()/2,(parentWidget()->height()*(1- (172/1120))) / 2 - this->height() / 2);QWidget::showEvent(e); }void TLTipsWidget::onTimerStayOut() {m_pTimer->stop();if(m_pCloseTimer->isActive()){m_pCloseTimer->stop();}m_pCloseTimer->start(); }void TLTipsWidget::onTimerCloseOut() {m_dTransparent -= 0.01;if(m_dTransparent <= 0.0001){m_pCloseTimer->stop();this->hide();m_pLabel->clear();}else{setWindowOpacity(m_dTransparent);} }

實現原理其實很簡單,通過定時器來控制顯示時間,以及動態改變透明度直到變為0后隱藏即可。不再贅述。

總結

以上是生活随笔為你收集整理的Qt QWidget实现消息提示控件TipsWidget的全部內容,希望文章能夠幫你解決所遇到的問題。

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