在 qt 中需要做 toast 效果和图片 tip 效果,故开发了下面一个类

后续会继续添加一些常用的控件

tool_tip.h

#include <qlabel.h>
#include <qlayout.h>
#include <qwidget.h> class ToolTips : public QWidget {
Q_OBJECT public:
enum TipTypes {
kNone = 0,
kToastTip,
kPictureTip,
}; public: // NOLINT
explicit ToolTips(QWidget* parent = nullptr, TipTypes tip_type = kNone);
~ToolTips();
Q_DISABLE_COPY(ToolTips) void ShowToastTip(const QString& tip, const int time = 3000); protected:
void CreateToastTip();
void CreatePictureTip(); void HideTip(); private:
void Init(); QWidget* toast_tip_widget_;
QHBoxLayout* toast_tip_layout_;
QLabel* toast_tip_; QWidget* picture_tip_widget_;
QHBoxLayout* picture_tip_layout_;
QLabel* picture_tip_; TipTypes tip_type_; QString PictureTipText = "图片提示"; QString ToastTipType = {
"QLabel {"
"background-color: #7f7f7f;"
"border-radius: 4px;"
"color: #ffffff;"
"}"}; // 重写 mousePressEvent 事件
void mousePressEvent(QMouseEvent* event) override;
};

  

tooltip.cpp

#include "tool_tip.h"

#include <qevent.h>
#include <qimagereader.h>
#include <qtimer.h> ToolTips::ToolTips(QWidget* parent, TipTypes tip_type)
: QWidget(parent), tip_type_(tip_type) {
Init();
// 默认隐藏 toast 提示
HideTip();
} ToolTips::~ToolTips() {} void ToolTips::Init() {
switch (tip_type_) {
case kToastTip:
CreateToastTip();
break;
case kPictureTip:
CreatePictureTip();
break;
default:
break;
}
} void ToolTips::CreateToastTip() {
toast_tip_widget_ = new QWidget(this);
toast_tip_widget_->setObjectName(QStringLiteral("toast_tip_widget"));
toast_tip_layout_ = new QHBoxLayout(toast_tip_widget_);
toast_tip_layout_->setObjectName(QStringLiteral("toast_tip_layout"));
toast_tip_ = new QLabel(toast_tip_widget_);
toast_tip_->setObjectName(QStringLiteral("toast_tip"));
QFont toast_tip_font = toast_tip_->font();
toast_tip_font.setPointSize(14 /** scale*/); // scale: 对于 dpi,这边需要乘以相应的屏幕缩放比
toast_tip_->setFont(toast_tip_font);
toast_tip_->setStyleSheet(ToastTipType);
toast_tip_->setAlignment(Qt::AlignCenter);
toast_tip_layout_->addWidget(toast_tip_);
toast_tip_layout_->setContentsMargins(0, 0, 0, 0); toast_tip_layout_->setSpacing(0);
this->setLayout(toast_tip_layout_);
} // TODO: 设计为通用的图片控件
void ToolTips::CreatePictureTip() {
picture_tip_widget_ = new QWidget(this);
picture_tip_widget_->setObjectName(QStringLiteral("picture_tip_widget"));
picture_tip_layout_ = new QHBoxLayout(picture_tip_widget_);
picture_tip_layout_->setObjectName(QStringLiteral("picture_tip_layout"));
picture_tip_ = new QLabel(this);
picture_tip_->setObjectName("picture_tip");
picture_tip_->setFixedSize(12, 12 /** scale*/);
picture_tip_->setScaledContents(true);
QImageReader pic(":/icon/picture_tip.png", "png");
pic.setAutoDetectImageFormat(false);
picture_tip_->setPixmap(QPixmap::fromImageReader(&pic));
picture_tip_->setToolTip(PictureTipText);
picture_tip_layout_->addWidget(picture_tip_);
picture_tip_layout_->setContentsMargins(0, 0, 0, 0); picture_tip_layout_->setSpacing(0);
this->setLayout(picture_tip_layout_);
} void ToolTips::ShowToastTip(const QString& tip, const int time) {
toast_tip_->setText(tip);
QTimer::singleShot(time, this, &QWidget::hide);
show();
} void ToolTips::HideTip() {
switch (tip_type_) {
case kToastTip:
hide();
break;
default:
break;
}
} void ToolTips::mousePressEvent(QMouseEvent* event) {
if (event->button() == Qt::LeftButton) {
if (tip_type_ == kPictureTip) {
// 针对图片控件的鼠标点击做出你需要的事件
}
event->accept();
}
QWidget::mousePressEvent(event);
}

封装一些常用的 qt 控件的更多相关文章

  1. Cocos2dx 把 glview 渲染到 Qt 控件上(Mac 环境)

    本文原链接:http://www.cnblogs.com/zouzf/p/4423256.html 环境:Mac 10.9.2   Xcode5.1.1  Qt5.3  cocos2dx-2.2.4 ...

  2. 将webkit内核封装为duilib的浏览器控件

    转载请说明出处,谢谢~~ 原本的duilib是自带浏览器控件的,但是使用了IE内核,我在做仿酷狗音乐播放器时,在右侧乐库要用到浏览器控件,而我使用自带的IE控件却发现了不少缺点,这也是duilib一直 ...

  3. 常用的UI控件

    关于本文:作为一名iOS软件工程师,熟练规范的使用常用的UI控件是必备的基础技能. 指示器(UIActivityIndicatorView)----转动的等待小菊花 提醒对话框(UIAlertView ...

  4. QT控件学习

    一.QPushButton 1.设置背景色: ui->pushButton->setStyleSheet("background-color: rgb(170, 0, 255)& ...

  5. Qt控件精讲一:按钮

    原地址:http://blog.csdn.net/yuxikuo_1/article/details/17397109 Qt Creater提供6种Button控件.如图1. Button控件介绍 控 ...

  6. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

  7. Android 常用炫酷控件(开源项目)git地址汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...

  8. C#搞跨平台UI,封装Cef作为Cpf的控件支持Windows,Linux,Mac

    终于封装完成了,采用离屏渲染方式,支持JS和C#互相调用,C#方法自动绑定到JS里,中文输入有自动调整输入法位置. 基于开源的CefGlue 移植,本来想用CefSharp,不过这个里面有很多C++的 ...

  9. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  10. Qt控件样式 Style Sheet Demo

    迟来的笔记,作为一个程序员每日记事已养成习惯,离开许久,不知不觉已喜欢用文字表达对技术的热爱,学无止境! Qt – 一个跨平台应用程序和UI开发框架:它包括跨平台类库.集成开发工具和跨平台 IDE,使 ...

随机推荐

  1. [转帖]Oracle与防火墙

    https://www.laoxiong.net/oracle_and_firewall.html 老熊 Oracle数据库管理 2009-04-20 最近有两次Oracle数据库故障与防火墙有关.这 ...

  2. [转帖]jmeter SSL证书相关配置

    在实际工作中,我们大多数接口都是用的HTTPS来保证安全,使用jmeter测试HTTPS请求是如何配置证书呢? 1.最简单的方法,在选项里选择SSL管理器,然后选择相应的证书即可 在弹出的选择框选择证 ...

  3. [转帖]jmeter_采样器sampler简介

    1.取样器介绍 取样器是用来模拟用户操作的,向服务器发送请求以及接收服务器的响应数据. 取样器是在线程组内部的元件,也就是说取样器只能在线程组中添加. 取样器(Sampler)是性能测试中向服务器发送 ...

  4. [转帖]Linux内核线程kthread简介【最好的一篇!】

    https://zhuanlan.zhihu.com/p/581587583 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求).内核需要多个执行流并行,为了 ...

  5. [转帖]10--k8s之数据持久化

    https://www.cnblogs.com/caodan01/p/15136217.html 目录 一.emptDir 二.hostPath 三.pv 和 pvc 1.环境准备 2.创建pv 3. ...

  6. [转帖]1.IPtable基础命令总结

    https://www.cnblogs.com/kcxg/p/10350870.html 规则查询 #查看对应表中的所有规则 iptables -t 表名 -L #查看表的指定链中的规则 iptabl ...

  7. [转帖]如何通过shell脚本对一个文件中的所有数值相加并求和

    https://developer.aliyun.com/article/886170?spm=a2c6h.24874632.expert-profile.255.7c46cfe9h5DxWK 1.背 ...

  8. [转帖]【k8s】1、基础概念和架构及组件

    文章目录 一.kubernetes概述 1.什么是kubernetes? 2.应用程序部署方式的演变 3.为什么要用kubernetes? 二.kubernetes 特性 三.Kubernetes集群 ...

  9. [转帖] shell管道咋堵住了

    https://www.cnblogs.com/codelogs/p/16060378.html 背景# 起因是这样的,我们想开发一个小脚本,当cpu使用率过高时,使用jstack将java的线程栈保 ...

  10. 通过浪潮服务器序列号查询硬件配置以及CPU的价格

    最近想知道具体CPU的配置和价格. 发现可以使用如此方式进行查询 https://www.intel.cn/content/www/cn/zh/products/details/processors/ ...