在 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. [转帖]Prometheus系列之Grafana 版本9.0.0 设置Email邮件报警实战

    目录 1. 配置文件conf/defaults.ini修改 2. Grafana Web页面配置报警邮箱接收者 3. 创建Dashboard 4. 创建Alert的文件夹 5. 设置Notificat ...

  2. [转帖]ldconfig命令

    https://linux265.com/course/linux-command-ldconfig.html ldconfig命令的作用主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文 ...

  3. [转帖]优化命令之sar——最牛命令

    目录 一:sar命令概述 1.1sar概述 1.2sar常用选项 1.3常用参数 二:CPU资源监控 2.1整体CPU使用统计(-u) 2.2各个CPU使用统计(-P) 2.3将CPU使用情况保存到文 ...

  4. Linux与Windows系统字符集的简要学习

    背景 最近同事反馈公司的产品再更新了mysql-8.0.31的驱动jar包后部分功能报错. 问题核心原因 研发这边石磊老师已经找到了. 结论是Mysql8.0.26之后的数据库驱动好像会识别操作系统的 ...

  5. linux时间和当前时间相关8小时问题

    依次执行如下的代码: 1.更改时区 cp /usr/share/zoneinfo/GMT /etc/localtime ln -sf /usr/share/zoneinfo/Asia/Shanghai ...

  6. 在数据增强、蒸馏剪枝下ERNIE3.0分类模型性能提升

    在数据增强.蒸馏剪枝下ERNIE3.0模型性能提升 项目链接: https://aistudio.baidu.com/aistudio/projectdetail/4436131?contributi ...

  7. 【6】opencv采用映射技术实现鱼眼镜头校正和鱼眼镜头还原全景图。

    相关文章: [1]windows下安装OpenCV(4.3)+VS2017安装+opencv_contrib4.3.0配置 [2]Visual Studio 2017同时配置OpenCV2.4 以及O ...

  8. 苹果iOS 17.2年底推送:iPhone 15 Pro的自定义操作按钮功能升级

    据报道,苹果会在年底推送iOS 17.2版本,新版系统将会修复iPhone 15系列WiFi速度慢的问题. 与此同时,iOS 17.2将会带来翻译功能,iPhone 15 Pro的自定义操作按钮切换到 ...

  9. JWT( JSON Web Token —— JSON Web 令牌 )的学习笔记

    一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样: 1.用户向服务器发送用户名和密码. 2.服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色.登录时间等等. ...

  10. Kubernetes全栈架构师(Docker基础)--学习笔记

    目录 Docker基础入门 Docker基本命令 Dockerfile用法 制作小镜像上 多阶段制作小镜像下 Scratch空镜像 Docker基础入门 Docker:它是一个开源的软件项目,在Lin ...