简述

经常使用企鹅的小伙伴一定对登录失败的提示框很熟悉,主要涉及窗口透明并添加图标、提示信息、关闭按钮的显示等。

我们可以利用QWidget创建一个提示框,然后通过样式设置我们想要的效果。

效果

源码

QMessageWidget.h

  1. #ifndef MESSAGE_WIDGET
  2. #define MESSAGE_WIDGET
  3. #include <QWidget>
  4. class QLabel;
  5. class QPushButton;
  6. class QMessageWidget : public QWidget
  7. {
  8. Q_OBJECT
  9. public:
  10. explicit QMessageWidget(QWidget *parent = 0);
  11. ~QMessageWidget();
  12. // 设置显示文本
  13. void setText(const QString &text);
  14. protected:
  15. void paintEvent(QPaintEvent *event);
  16. private:
  17. QLabel *m_pMessageLabel;
  18. };
  19. #endif // MESSAGE_WIDGET

QMessageWidget.cpp

  1. #include <QLabel>
  2. #include <QStyleOption>
  3. #include <QPainter>
  4. #include <QPushButton>
  5. #include <QHBoxLayout>
  6. #include "QMessageWidget.h"
  7. QMessageWidget::QMessageWidget(QWidget *parent)
  8. : QWidget(parent)
  9. {
  10. setFixedHeight(25);
  11. setAutoFillBackground(true);
  12. setObjectName("messageWidget");
  13. // 提示图标
  14. QLabel *pIconLabel = new QLabel(this);
  15. m_pMessageLabel = new QLabel(this);
  16. QPushButton *pCloseButton = new QPushButton(this);
  17. pCloseButton->setFixedSize(8, 8);
  18. pIconLabel->setFixedSize(16, 16);
  19. pIconLabel->setScaledContents(true);
  20. pIconLabel->setObjectName("informationLabel");
  21. m_pMessageLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  22. m_pMessageLabel->setObjectName("highlightLabel");
  23. m_pMessageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  24. pCloseButton->setObjectName("closeTipButton");
  25. QHBoxLayout *pLayout = new QHBoxLayout();
  26. pLayout->addWidget(pIconLabel);
  27. pLayout->addWidget(m_pMessageLabel);
  28. pLayout->addWidget(pCloseButton);
  29. pLayout->setSpacing(5);
  30. pLayout->setContentsMargins(3, 3, 5, 3);
  31. setLayout(pLayout);
  32. connect(pCloseButton, SIGNAL(clicked(bool)), this, SLOT(close()));
  33. }
  34. QMessageWidget::~QMessageWidget()
  35. {
  36. }
  37. // 设置显示文本
  38. void QMessageWidget::setText(const QString &text)
  39. {
  40. m_pMessageLabel->setText(text);
  41. }
  42. // 设置样式需要重写
  43. void QMessageWidget::paintEvent(QPaintEvent *event)
  44. {
  45. Q_UNUSED(event);
  46. QStyleOption opt;
  47. opt.init(this);
  48. QPainter p(this);
  49. style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
  50. }

样式

  1. // 界面样式
  2. QWidget#messageWidget {
  3. background: rgba(255, 255, 255, 20%);
  4. }
  5. // 提示信息样式
  6. QLabel#highlightLabel {
  7. color: rgb(0, 160, 230);
  8. }
  9. // 图标样式
  10. QPushButton#closeTipButton {
  11. border-radius: none;
  12. border-image: url(:/Images/tipClose);
  13. background: transparent;
  14. }
  15. QPushButton#closeTipButton:hover {
  16. border-image: url(:/Images/tipCloseHover);
  17. }
  18. QPushButton#closeTipButton:pressed {
  19. border-image: url(:/Images/tipClosePressed);
  20. }

这里实现了设置信息,贾娜比隐藏等效果,可以在此基础上进行扩展。背景色、字体颜色、图标等样式都可以自行设置,主要是实现思路,愿大家共勉。

Qt之透明提示框的更多相关文章

  1. qt之透明提示框(模拟qq) (非常漂亮)

    Qt实现类似QQ的登录失败的提示框,主要涉及窗口透明并添加关闭按钮,以及图标和信息的显示等. 直接上代码: #include "error_widget.h" ErrorWidge ...

  2. Qt之等待提示框(QMovie)

    简述 关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系. 关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的. ...

  3. Qt之等待提示框(QTimer)

    简述 上节讲述了关于QPropertyAnimation实现等待提示框的显示,本节我们使用另外一种方案来实现-使用定时器QTimer,通过设置超时时间定时更新图标达到旋转效果. 简述 效果 资源 源码 ...

  4. Qt之等待提示框(QPropertyAnimation)

    简述 之前分享过QLabel可以通过QMovie播放gif图片,可以实现等待提示框,今天主要使用动画QPropertyAnimation来进行实现! 数据加载的时候,往往都需要后台线程进行数据请求,而 ...

  5. Qt实现冒泡提示框

    通过QLabel创建类似冒泡方式的提示框(提示框显示位置为父类控件居中位置,具体可根据需要自行修改),鼠标停留提示框界面时查看信息,离开时自动淡化消失的效果: 头文件定义 #ifndef _TTipW ...

  6. Qt之等待提示框三(QLabel进行多图片切换)

    之前分享过的等待提示框有用QMovie播放gif图片实现的,也有纯代码实现的,今天再次分享另一种实现方式,如题目所示:QLabel进行图片的切换!     进行用户登录的时候,往往都需要后台线程进行用 ...

  7. Qt之QProgressIndicator(等待提示框)

    简述 很早以前在网上看到一个纯代码实现的旋转动画感觉效果很不错,分享给大家.不得不说,条条大道通罗马,我们需要更多地创造... 详见:QProgressIndicator 简述 效果 源码 使用 更多 ...

  8. Qt 信息提示框 QMessageBox

    information QMessageBox::information(NULL, "Title","Content",QMessageBox::Yes | ...

  9. QPainterPath 不规则提示框

    currentPosition()是最后一次绘制后的“结束点”(或初始点),使用moveTo()移动currentPosition()而不会添加任何元素. QPainterPath ​合并: 1.方法 ...

随机推荐

  1. uialertview 改变文字显示位置

    - (void)willPresentAlertView:(UIAlertView *)alertView{ UIView * view = [alertView.subviews objectAtI ...

  2. vi编辑

    保存命令 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :wq 保存文件并退出vi :wq! 强制 ...

  3. B树、B-树、B+树、B*树---转载

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  4. 真机模拟器.a文件编译报错

  5. MetInfo安装

    安装MetInfo企业网站管理系统需要经历三个步骤:安装准备.上传文件.安装系统. 第一步:安装前的准备 环境要求:需要支持PHP并提供Mysql数据库的空间(虚拟主机),详细要求: 下载MetInf ...

  6. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

  7. ExtJs之 Ext.JSON

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  8. UVA 11481 - Arrange the Numbers 数学

    Consider this sequence {1, 2, 3, . . . , N}, as a initial sequence of first N natural numbers. You ca ...

  9. 妙味课堂——HTML+CSS(第四课)(二)

    单开一篇来讲一个大点的话题——清浮动    来看下例: <!DOCTYPE html> <html> <head> <meta charset="U ...

  10. 妙味课堂——HTML+CSS(第一课)

    一句话,还记忆不如烂笔头,何况还这么笨,记下笔记,也是记录这一路学习的过程. 妙味课堂第一课并未一味地先讲HTML,而是穿插着CSS讲解,这一点不同于一些其他视频,这一点挺特别的!所以这一课涉及到HT ...