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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt 自定义悬浮窗(带动画,类似QQ拼音输入法)

發布時間:2024/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt 自定义悬浮窗(带动画,类似QQ拼音输入法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.運行效果

實現功能:

1.可拖動。

2.可顯示,可隱藏?。

3.懸浮在主界面上面。

4.帶動畫。

2.ui界面

?3.源碼

//FloatingWindow.h #pragma once#include <QWidget> #include "ui_FloatingWindow.h" #include <QPoint> #include <QPropertyAnimation>class FloatingWindow : public QWidget {Q_OBJECTpublic:FloatingWindow(QWidget *parent = Q_NULLPTR);~FloatingWindow();private:Ui::FloatingWindow ui;protected://事件過濾bool eventFilter(QObject *watched, QEvent *event);private:void hideWidget(QWidget *w = nullptr);void showWidget(QWidget *w = nullptr);private:bool m_bDragFlag;QPoint m_pointDrag;QPropertyAnimation *m_pAnimation;QPropertyAnimation *m_pAnimation2; };#endif // FLOATINGWINDOW_H//FloatingWindow.cpp#include "FloatingWindow.h" #include <QMouseEvent>FloatingWindow::FloatingWindow(QWidget *parent): QWidget(parent), m_bDragFlag(false), m_pAnimation(nullptr), m_pAnimation2(nullptr) {ui.setupUi(this);setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);ui.btnQQ->installEventFilter(this);ui.widget->installEventFilter(this);hideWidget();m_pAnimation = new QPropertyAnimation(ui.widget, "size");m_pAnimation->setDuration(250);m_pAnimation->setStartValue(QSize(0, 64));m_pAnimation->setEndValue(QSize(180, 64));m_pAnimation->setEasingCurve(QEasingCurve::Linear);m_pAnimation2 = new QPropertyAnimation(ui.widget, "size");m_pAnimation2->setDuration(250);m_pAnimation2->setStartValue(QSize(180, 64));m_pAnimation2->setEndValue(QSize(0, 64));m_pAnimation2->setEasingCurve(QEasingCurve::Linear);setAutoFillBackground(false);setAttribute(Qt::WA_TranslucentBackground);ui.frame->setStyleSheet("background:transparent;"); }FloatingWindow::~FloatingWindow() { }bool FloatingWindow::eventFilter(QObject *target, QEvent *event) {QMouseEvent *mouse = dynamic_cast<QMouseEvent *>(event);if (target == ui.btnQQ){if (event->type() == QEvent::Enter){if (m_pAnimation->state() != QAbstractAnimation::Running){showWidget();m_pAnimation->start();}}if (event->type() == QEvent::Leave){if (m_pAnimation2->state() != QAbstractAnimation::Running){m_pAnimation2->start();}}}//拖動if (mouse){if (mouse->button() == Qt::LeftButton && mouse->type() == QEvent::MouseButtonPress){m_bDragFlag = true;if (target == ui.btnQQ){m_pointDrag = ui.frame->mapToParent(ui.btnQQ->mapToParent(mouse->pos()));}}else if (mouse->type() == QEvent::MouseButtonRelease){m_bDragFlag = false;}else if (m_bDragFlag && mouse->type() == QEvent::MouseMove){this->move(mouse->globalPos() - m_pointDrag);}}return QWidget::eventFilter(target, event); }void FloatingWindow::hideWidget(QWidget *w) {if (w == nullptr){ui.btnExpression->hide();ui.btnSetting->hide();ui.btnSemiangle->hide();ui.btnWord->hide(); }else{w->hide();} }void FloatingWindow::showWidget(QWidget *w) {if (w == nullptr){ui.btnWord->show();ui.btnSemiangle->show();ui.btnSetting->show();ui.btnExpression->show();}else{w->show();} }

4.完整代碼

帶動畫的懸浮窗

總結

以上是生活随笔為你收集整理的Qt 自定义悬浮窗(带动画,类似QQ拼音输入法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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