• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Qt实现屏幕底部冒泡效果

qt 搞代码 4年前 (2022-01-06) 34次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了Qt实现屏幕底部冒泡效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在Qt局域网聊天程序的到的东西太多了,最想和大家分享的是关于局域网聊天信息的冒泡,他的设计也不是特别难,我写了一个类分享给大家。

可能各位道友有更好的办法,但希望不要拆台哦。

该类中有一部分适应屏幕分辨率的类,也一并加入。如有不懂的欢迎大家留言。

首先是获取屏幕分辨率,并实现自适应屏幕分辨率。

 #ifndef VERDESKTOP_H #define VERDESKTOP_H #include  #include  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  #include  #include  #include "verdesktop.h" #include  #include  #include  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
 #include "messagedialog.h" #include  #include  #include  #include  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));//起点 animatio<mark style="color:transparent">来源gaodaimacom搞#^代%!码&网</mark>n0->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;iwidth()-(x-i)*2, this->height()-(x-i)*2); color.setAlpha(150 - sqrt(i)*50); painter.setPen(color); painter.drawPath(path); } }

以上就是Qt实现屏幕底部冒泡效果的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Qt实现屏幕底部冒泡效果
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址