Qt 自定义提示框 右下角冒泡

这篇具有很好参考价值的文章主要介绍了Qt 自定义提示框 右下角冒泡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网页右下角上经常会出现一些提示性的信息,B/S有的东西,C/S当然也可以有,就像QQ的消息提示一样! 实现一个类似的东西并不困难,只要想明白原理实现起来就很简单了! 实现原理: (1)显示:右下角缓慢弹出,定时器启动,逐渐改变位置即可,到达相应位置,停止计时器

(2)驻留:定时器启动,让界面停留一定的时间,相应的时间过后停止定时器

(3)退出:可以直接退出,也可以采用改变透明度的形式模糊退出

标题栏:
#include "message_title.h"
#include "setting.h"
MessageTitle::MessageTitle(QWidget *parent)
 : QWidget(parent)
{
  setFixedHeight(30);
  title_label = new QLabel();
  close_button = new PushButton();
  layout = new QHBoxLayout();  
 title_label->setObjectName(QString::fromUtf8("labelOne"));
  QFont title_font = title_label->font();
  title_font.setBold(true);
  title_label->setFont(title_font);
  close_button->loadPixmap("tipclose");
  close_button->setToolTip(tr("close"));
  layout->addWidget(title_label);
  layout->addStretch();
  layout->addWidget(close_button);
  layout->setMargin(0);
  setLayout(layout);
  connect(close_button, SIGNAL(clicked()), this, SIGNAL(myClose()));
}
void MessageTitle::paintEvent(QPaintEvent *)
{
  QLinearGradient linear(rect().topLeft(), rect().bottomRight());
  linear.setColorAt(0, QColor(55, 135, 215));
  linear.setColorAt(0.5, QColor(140, 120, 185));
  linear.setColorAt(1, QColor(55, 135, 215));
  QPainter painter(this);
  painter.setBrush(QBrush(linear));
  painter.setPen(Qt::NoPen);
  painter.drawRect(rect());
}
void MessageTitle::setTitleText(QString title)
{
  title_label->setText(title);
} 
弹出框界面:

#include "message_widget.h"

MessageWidget::MessageWidget(QWidget *parent)
 : QWidget(parent)
{
  setFixedSize(300, 180);
  setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
  message_title = new MessageTitle();
  content_label = new QLabel();
  icon_label = new QLabel();
  timer_show = new QTimer(this);
  timer_stay = new QTimer(this);
  timer_close = new QTimer(this);

  time_count = 0;
  transparent = 1.0;
  desktop_height = QApplication::desktop()->height();

  icon_label->setFixedSize(64, 64);

  content_label->setWordWrap(true);
 content_label->setAlignment(Qt::AlignTop);

  QVBoxLayout *v_layout = new QVBoxLayout();
  v_layout->addWidget(icon_label);
  v_layout->addStretch();

  QVBoxLayout *v_layout2 = new QVBoxLayout();
  QSpacerItem *spacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
  v_layout2->addSpacerItem(spacerItem);
  v_layout2->addWidget(content_label);
 
  QHBoxLayout *h_layout = new QHBoxLayout();
  h_layout->addLayout(v_layout);
  h_layout->addLayout(v_layout2);
  QMargins margins = h_layout->contentsMargins();
  margins.setTop(20);
  margins.setLeft(10);
  margins.setRight(10);
  h_layout->setContentsMargins(margins);

  QVBoxLayout *main_layout = new QVBoxLayout();
  main_layout->setMargin(0);
  main_layout->addWidget(message_title);
  main_layout->addLayout(h_layout);
  setLayout(main_layout);

  connect(timer_show, SIGNAL(timeout()), this, SLOT(myMove()));
  connect(timer_stay, SIGNAL(timeout()), this, SLOT(myStay()));
  connect(timer_close, SIGNAL(timeout()), this, SLOT(myClose()));
  connect(message_title, SIGNAL(myClose()), this, SLOT(close()));
}

void MessageWidget::showMsg(QString title, QString content)
{
  QPixmap pixmap(":/icon/win");
  icon_label->setPixmap(pixmap);
  message_title->setTitleText(" " + title);
  content_label->setText(" " + content);
  this->showMessage();
}

void MessageWidget::paintEvent(QPaintEvent *)
{
  QBitmap bitmap(this->size());
  bitmap.fill(Qt::white);
  QPainter painter(this);
  painter.setBrush(QBrush(QColor(250, 240, 230)));
  painter.setPen(QPen(QBrush(QColor(55, 135, 215)), 6));
  painter.drawRoundedRect(bitmap.rect(), 5, 5);
  setMask(bitmap);
}
void MessageWidget::showMessage()
{
  time_count = 0;
  transparent = 1.0;
  desktop_height = QApplication::desktop()->height();
  timer_show->stop();
  timer_stay->stop();
  timer_close->stop();
  setWindowOpacity(1);
  QDesktopWidget *desktop = QApplication::desktop();
  desk_rect = desktop->availableGeometry();
  normal_point.setX(desk_rect.width() - rect().width());
  normal_point.setY(desk_rect.height() - rect().height());
  move(normal_point.x(), normal_point.y());
  showNormal();
  timer_show->start(5);
}

void MessageWidget::myMove()
{
  desktop_height--;
  move(normal_point.x(), desktop_height);
  if(desktop_height <= normal_point.y())
  {
    timer_show->stop();
    timer_stay->start(1000);
  }
}

void MessageWidget::myStay()
{
  time_count++;
  if(time_count >= 9)
  {
    timer_stay->stop();
    timer_close->start(200);
  }
}

void MessageWidget::myClose()
{
  transparent -= 0.1;
  if(transparent <= 0.0)
  {
    timer_close->stop();
    this->close();
  }

  else

  {
   setWindowOpacity(transparent);
 }   
}

Qt 自定义提示框 右下角冒泡,Qt 界面设置,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-670417.html

到了这里,关于Qt 自定义提示框 右下角冒泡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pycharm右下角出现IDE error occured

    在使用pycharm运行程序的时候,右下角出现了IDE error occured,see detail submit display的提示 解决方案: 在PyCharm中出现“IDE error occurred”的错误提示通常是由于程序崩溃或Python解释器故障引起的。以下是可能导致此错误的一些常见原因和解决方案: 1 问题插件:有些PyCharm插件可能

    2024年02月12日
    浏览(38)
  • uniapp写出文本域,右下角并限制字数200

    js代码  在data中定义一个变量desc   desc: \\\'\\\', descInput(e) {     console.log(e.detail.value.length, \\\'输入的字数\\\') },  样式: .textarea_box{     padding: 20rpx;     background-color: #F2F2F2;     /deep/ .uni-textarea-textarea{         font-size: 28rpx;         line-height: 45rpx;     }     .num{         t

    2024年02月10日
    浏览(39)
  • Win11电脑右下角时间显示秒方法教学

           Win11电脑右下角时间显示秒方法教学。Win11系统的最新版本已经可以支持状态栏显示秒的功能了。如果你使用的Win11不是最新版本,其实也是可以实现秒数的显示的。接下来我们就来看看具体的设置方法吧。         具体操作如下: 1、无法直接通过修改Win11注册

    2024年02月11日
    浏览(74)
  • windows11电脑右下角没有输入法解决方法

    打开windows11电脑的设置选项,点击高级键盘设置,勾选使用桌面语言栏选项,点击保存就能在右下角找到输入法了,还可以尝试打开运行窗口,输入ctfmon.exe命令回车,这样就能快速打开输入法啦。 windows11电脑右下角没有输入法解决方法 1、使用键盘组合键“win+I”直接打开

    2024年02月05日
    浏览(58)
  • idea右下角显示git管理图标,IDEA功能显示

    IntelliJ IDEA 2021.2.1 左右的版本如下图勾选即可 显示services窗口 点击设置图标,勾选Show Services Tree即可

    2024年02月16日
    浏览(45)
  • 任务栏右下角上网拨号连接图标不能显示的解决方法

    上网拨号连接图标不能显示的解决方法如下: 右击【网上邻居】图标,在弹出的快捷菜单中执行【属性】命令,在弹出的【网络连接】窗口中右击【本地连接】图标,在win7系统下载弹出的快捷菜单中执行【属性】命令;在【本地连接属性】对话框中选中最后两项复选框操作如

    2024年02月06日
    浏览(45)
  • 【Unity】去除Unity打包出来右下角trial version 水印

    今天打包出来在android机上跑突然发现右下角出现trial version水印,网上找了很多发现都千篇一律的说到unity的Help下面的Manage License下去下载许可证,再在官网上去重新激活许可证再下载下来重新打开Unity,但是自己操作发现流程跟他们说的完全不一样,因为Unity和UnityHub版本更新

    2024年03月18日
    浏览(101)
  • IDEA创建完Maven工程后,右下角一直显示正在下载Maven插件

    这是由于新建的Maven工程,IDEA会用它内置的默认的Maven版本,使用国外的网站下载Maven所需的插件,速度很慢 。 每次创建 Project 后都需要设置 Maven 家目录位置(就是我们自己下载的Maven),否则 IDEA 将使用内置的 Maven(不稳定)并使用默认的本地仓库位置。这样一来,我们在

    2024年02月08日
    浏览(54)
  • 【Win10系统右下角网络图标消失、无法联网、网络Internet状态闪退等问题解决方法】

    今天开机突然碰到网络异常情况: 头天晚上还正常使用,正常关机,上午再打开就出了问题; 任务栏右下角网络图标消失,有线无线网均无法连接; 系统设置中的“网络”的状态无法打开,打开就闪退; 从更改适配器选项中打开网络任务栏,发现没有可用网络,以往的WL

    2024年02月04日
    浏览(55)
  • 【Windows 常用工具系列 5 -- 如何在网页(CSDN)中实现右上角及右下角数字显示】

    上篇文章:Windows 常用工具系列 5 – Selenium IDE的使用方法 下篇文章:Windows 常用工具系列 6 – CSDN字体格式(字体、颜色、大小)、背景色设置 在网页撰写文章时经常遇到需要平方的写法,比如书写 X 的 2次方, 可以通过下面方法完成: supx/sup : x 上移到右上角; subx/sub : x 下移

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包