Qt实现右下角消息通知队列(滚动版本)
回到顶部 效果
上一篇博客:Qt 实现右下角消息通知队列 的通知是会定时关闭销毁的,最多同时显示 5 个通知。但有些情况下,不想前面的通知被销毁,要求保留可以一直浏览的话,就不能用了,所以改写了下,用这篇博客总结下。 点击"提示1"按钮,加入通知信息到数据队列中,并显示摇晃动画,添加到 QScrollArea 滚动区域中,方便超出 5 个通知时可以滚动浏览;可以删除,删除也添加"向右移动隐藏动画"。
下载地址
https://github.com/confidentFeng/QtAppProjec 关键代码
NotifyWidget.cpp NotifyManager::NotifyManager(QWidget *parent) : QWidget(parent) { this->setFixedSize(320, 600); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); this->setObjectName("NotifyManager"); // 创建一个子窗口,这个子窗口交给滚动区域 QWidget* pSubWidget = new QWidget(this); // 创建滚动区域 m_pScrollArea = new QScrollArea(this); m_pScrollArea->setFixedSize(width(), NOTIFY_HEIGHT); m_pScrollArea->setWidgetResizable(true); // 决定着滚动区域是否应调整子widget的大小 m_pScrollArea->verticalScrollBar()->setSingleStep(NOTIFY_HEIGHT/3); // 设置步长,每次滚动滚轮只上移或下移一个item m_pScrollArea->setWidget(pSubWidget); // 子widget可以使用QScrollArea::setWidget(QWidget *widget)来指定 m_pScrollArea->move(QPoint(0, height() - NOTIFY_HEIGHT)); // 给子窗口设置一个垂直布局,方便动态添加通知 m_pLayoutSub = new QVBoxLayout(pSubWidget); m_pLayoutSub->setSpacing(NOTIFY_SPACE); m_pLayoutSub->setContentsMargins(0,0,0,0); m_pLayoutSub->addStretch(); // 初始化队列的通知数目界面 m_pNotifyCntWidget = new NotifyCountWidget(this); m_pNotifyCntWidget->hide(); // 显示队列的通知数目的定时器 m_pTimerCnt = new QTimer(this); m_pTimerCnt->setSingleShot(true); m_pTimerCnt->setInterval(3000); connect(m_pTimerCnt, &QTimer::timeout, [=]{ m_pNotifyCntWidget->hide(); m_pNotifyCntWidget->isStartAnim(false); // 结束动画 }); // 队列定时器 m_pTimerQueue = new QTimer(this); m_pTimerQueue->setInterval(500); m_pTimerQueue->start(); connect(m_pTimerQueue, &QTimer::timeout, [=]{ showQueueNotify(); }); } // 通知入队 void NotifyManager::notifyEnqueue(const QString &title, const QString &body, const QVariantMap &data) { // 将标题栏和内容数据添加到队列中 QVariantMap tmp = data; tmp.insert("title", title); tmp.insert("body", body); tmp.insert("icon", m_defaultIcon); m_dataQueue.enqueue(tmp); } // 显示队列中的通知 void NotifyManager::showQueueNotify() { m_pTimerQueue->stop(); // 如果通知数目超出限制,则显示"通知当前数目界面" if (m_notifyCount >= NOTIFY_MAX_COUNT || m_dataQueue.isEmpty()) { m_pTimerQueue->start(); return; } // 创建并显示新的通知 NotifyWidget *notifyWidget = new NotifyWidget(this); // 将管理员自身传给notifyWidget的m_manager notifyWidget->setData(m_dataQueue.dequeue()); // 设置数据队列的第一个数据(dequeue,删除队列第一个元素,并返回这个元素) m_pLayoutSub->insertWidget(0, notifyWidget); m_notifyCount++; // 显示新的通知时,摇晃动画 animationShake(notifyWidget, 800, [=](){ m_pTimerQueue->start(); }); // 通知销毁之后触发下面槽函数 connect(notifyWidget, &QObject::destroyed, this, [this](){ m_notifyCount--; // 更新滚动区域的高度 updateAreaHeight(); }); // 更新滚动区域的高度 updateAreaHeight(); } // 更新滚动区域的高度 void NotifyManager::updateAreaHeight() { // 布局最前面插入通知 if(m_notifyCount < VIEW_ITEM) { m_pScrollArea->move(QPoint(0, height() - NOTIFY_HEIGHT*m_notifyCount)); m_pScrollArea->setFixedHeight(NOTIFY_HEIGHT*m_notifyCount); } else { // 显示队列的通知数目 showQueueCount(); m_pScrollArea->setFixedHeight(NOTIFY_HEIGHT*(VIEW_ITEM-1) -10); } }
点击领取Qt学习资料+视频教程~「链接」
邀请函2022英特尔AI开发者大会明日起航11月24日13301730,2022英特尔AI开发者大会即将举办,英特尔希望携手广大人工智能领域技术合作伙伴与企业级Al开发者,共建良性AI生态,共同把最新的人工智能模型与商业转
没有你陪伴,思念天天纠缠在心上,想你,余生只想与你厮守到老爱是那么的美,美得如梦似幻,可现实却又太骨感,于是,我便带着心中的梦想,求取美好的结局!心有所属,心爱的人便是永远,想你,爱的温暖在心上弥漫,我的思念如痴如狂,尽管不曾对你言说,但
陷入派系纷争的金熙宗杀了弟弟皇后引发祸端,命丧于亲信护卫1135年,金太宗完颜晟去世,金太祖的孙子十六岁的完颜亶,在右勃极烈完颜宗翰左勃极烈完颜宗干等人的拥戴下,承继大统,是为金熙宗。登基称帝后,喜好汉文经史的金熙宗在掌握着军政大权的完
篮网2连胜,西蒙斯克服心魔,回归正轨,杜兰特三巨头大战恩比德本文前言篮网队两连胜,勇士队两连胜,湖人队三连胜,最近篮网湖人和勇士终于开始找到了赢球的节奏和状态。不知不觉,篮网队战绩8胜9负,篮网队已经从东部倒数升到了东部第九名。现在欧文也已
罗斯批评皮蓬前妻不该跟侄子辈的马库斯乔丹交往NBA评论员杰伦罗斯今天参加节目时,聊到了乔丹儿子马库斯乔丹和皮蓬前妻拉尔萨约会的话题,对后者进行了批评。此前有报道称,今年31岁的马库斯和48岁的拉尔萨约会,两个人还被拍到在迈阿
杜兰特澄清关于队友的言论我表达欠妥,但我不是那个意思今日,凯文杜兰特在一档访谈节目中澄清了自己此前关于队友的评论。杜兰特认为在之前接受ChrisHaynes采访时,我或许应该表达的更合适一些,我并不是想表达那个意思(认为队友不够好)
迎财神接福运收获本属于你的财富钱能解决的问题都不是问题,钱不能解决的问题才是真问题,有钱能解决大部分问题,而最大的问题是没钱。用钱能解决问题,自然简单轻松,在习惯遇事时用钱解决问题之后,产生的是对于钱的依赖和迷
人都是相互的,你怎么对待别人,别人就会怎么对待你身边总是有那么一群的人,非常的搞笑,非常的有意思,做的事情又让人极其的不舒服!人本身都是比较大方,不是很小气的,有什么好的东西,都喜欢和别人一起分享,一同感受人生的快乐!但是,身边
正能量的魅力清澈而单纯的心灵才能感受到正能量,而自私的心看见的只是复杂混沌这句话是日本四大经营之圣稻盛和夫说的。有很多人都有过这样的经历,听过很多激励大师和商业导师的课程。他们大多数的理念要改
我校77门课程获省级一流课程认定近日,浙江省教育厅发布关于公布2022年省级一流本科课程省级一流本科国际化课程及首批省级劳动教育一流本科课程(教学团队)认定结果的通知(浙教办函2022352号),我校77门课获得
远离文身,让青春不被刺痛来源中国妇女报多地启动专项治理行动,推动未成年人文身治理工作办法进一步落地远离文身,让青春不被刺痛中国妇女报全媒体记者刘天红近日,多地启动未成年人文身专项治理行动,推动6月6日出台