在Qt局域网聊天程序的到的东西太多了,最想和大家分享的是关于局域网聊天信息的冒泡,他的设计也不是特别难,我写了一个类分享给大家。
可能各位道友有更好的办法,但希望不要拆台哦。
该类中有一部分适应屏幕分辨率的类,也一并加入。如有不懂的欢迎大家留言。
首先是获取屏幕分辨率,并实现自适应屏幕分辨率。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#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 |
1
2
3
4
5
6
7
8
9
10
11
|
#include "verdesktop.h" VerDesktop::VerDesktop(QObject *parent) : QObject(parent) { } float VerDesktop::getVerDesktop() { QDesktopWidget dw; float ver= float (dw.screenGeometry().width())/ float (1920); return ver; } |
以下是冒泡的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#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; //适应屏幕分辨率 explicit MessageDialog(QWidget *parent=0); QLabel *imagelabel; //头像 QLabel *namelabel; //名 void messagedialogseting(); //设置 QTimer *timer0; private : void paintEvent(QPaintEvent *event); public slots: void timerout(); }; #endif // MESSAGEDIALOG_H |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#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() //显现的动画 { 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); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ZQL2288/article/details/62049506