Qt實現(xiàn)屏幕底部冒泡效果
更新時間:2020年08月20日 10:05:32 作者:番茄炒蛋不要蛋
這篇文章主要為大家詳細介紹了Qt實現(xiàn)屏幕底部冒泡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
在Qt局域網(wǎng)聊天程序的到的東西太多了,最想和大家分享的是關(guān)于局域網(wǎng)聊天信息的冒泡,他的設(shè)計也不是特別難,我寫了一個類分享給大家。
可能各位道友有更好的辦法,但希望不要拆臺哦。
該類中有一部分適應(yīng)屏幕分辨率的類,也一并加入。如有不懂的歡迎大家留言。

首先是獲取屏幕分辨率,并實現(xiàn)自適應(yīng)屏幕分辨率。
#ifndef VERDESKTOP_H
#define VERDESKTOP_H
#include <QObject>
#include <QDesktopWidget>
class VerDesktop : public QObject
{
Q_OBJECT
public:
explicit VerDesktop(QObject *parent = 0);
float getVerDesktop();
signals:
public slots:
};
#endif // VERDESKTOP_H
#include "verdesktop.h"
VerDesktop::VerDesktop(QObject *parent) : QObject(parent)
{
}
float VerDesktop::getVerDesktop()
{
QDesktopWidget dw;
float ver=float(dw.screenGeometry().width())/float(1920);
return ver;
}
以下是冒泡的代碼
#ifndef MESSAGEDIALOG_H
#define MESSAGEDIALOG_H
#include <QDialog>
#include <QPropertyAnimation>
#include <QLabel>
#include "verdesktop.h"
#include <QTimer>
#include <QPaintEvent>
#include <QPainter>
class MessageDialog : public QDialog
{
Q_OBJECT
public:
float ver;
VerDesktop *v;//適應(yīng)屏幕分辨率
explicit MessageDialog(QWidget *parent=0);
QLabel *imagelabel;//頭像
QLabel *namelabel;//名
void messagedialogseting();//設(shè)置
QTimer *timer0;
private:
void paintEvent(QPaintEvent *event);
public slots:
void timerout();
};
#endif // MESSAGEDIALOG_H
#include "messagedialog.h"
#include <QApplication>
#include <QDesktopWidget>
#include <QGraphicsDropShadowEffect>
#include <QPalette>
MessageDialog::MessageDialog(QWidget *parent):QDialog(parent)
{
v=new VerDesktop(this);
ver=v->getVerDesktop();
messagedialogseting();
connect(timer0,SIGNAL(timeout()),this,SLOT(timerout()));
}
void MessageDialog::messagedialogseting()//顯現(xiàn)的動畫
{
QPalette palette(this->palette());
palette.setColor(QPalette::Background,QColor(49,225,215));
setPalette(palette);
setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint|windowFlags());
QRect rect=QApplication::desktop()->availableGeometry();
setGeometry(rect.width()-250*ver,rect.height()-80*ver,250*ver,80*ver);
QGraphicsDropShadowEffect *effect=new QGraphicsDropShadowEffect(this);
effect->setOffset(10,10);
effect->setBlurRadius(10);
effect->setColor(QColor(50,50,50));
this->setGraphicsEffect(effect);
imagelabel=new QLabel(this);
namelabel=new QLabel(this);
imagelabel->setGeometry(5*ver,15*ver,50*ver,50*ver);
namelabel->setGeometry(90*ver,0,150*ver,80*ver);
namelabel->setFont(QFont("微軟雅黑",15*ver));
namelabel->setAlignment(Qt::AlignCenter);
QPropertyAnimation *animation0=new QPropertyAnimation(this,"geometry");
animation0->setDuration(500*ver);
animation0->setStartValue(QRect(rect.width(),rect.height()-80*ver,250*ver,80*ver));//起點
animation0->setEndValue(QRect(rect.width()-250*ver,rect.height()-80*ver,250*ver,80*ver));//終點
animation0->start(QAbstractAnimation::DeleteWhenStopped);
timer0=new QTimer(this);
timer0->start(1000);
}
void MessageDialog::timerout()//消失的動畫
{
timer0->stop();
QPropertyAnimation *animation0=new QPropertyAnimation(this,"windowOpacity");
animation0->setDuration(500);
animation0->setStartValue(1);
animation0->setEndValue(0);
animation0->start(QAbstractAnimation::DeleteWhenStopped);
connect(animation0,SIGNAL(finished()),this,SLOT(close()));
}
void MessageDialog::paintEvent(QPaintEvent *event)//做陰影
{
const int x=3;
Q_UNUSED(event);
QPainterPath yinying_path;
yinying_path.setFillRule(Qt::WindingFill);
yinying_path.addRect(x,x,this->width()-2*x,this->height()-2*x);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
QColor color(0,0,0,50);
for(int i=0;i<x;i++)
{
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRect(x-i, x-i, this->width()-(x-i)*2, this->height()-(x-i)*2);
color.setAlpha(150 - sqrt(i)*50);
painter.setPen(color);
painter.drawPath(path);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
c++報錯問題解決方案lvalue required as left opera
這篇文章主要介紹了c++報錯:lvalue required as left operand of assignment,出現(xiàn)此錯誤原因,是因為,等號左邊是不可被修改的表達式或常量,而表達式或常量不能作為左值,需要的朋友可以參考下2023-01-01
詳解dll動態(tài)庫的開發(fā)與調(diào)用及文件的讀寫小程序
這篇文章主要介紹了詳解dll動態(tài)庫的開發(fā)與調(diào)用及文件的讀寫小程序的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
C++中一維數(shù)組與指針的關(guān)系詳細總結(jié)
以下是對C++中一維數(shù)組與指針的關(guān)系進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下2013-09-09

