在 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. [转帖]解决Java/MySQL性能问题的思路

    https://plantegg.github.io/2023/08/28/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98%E6%80%9D%E8%B7%AF/ 10年前写的 ...

  2. [转帖]What is Pstate

    https://www.jianshu.com/p/342480d917e3 When someone refers to a P-state, generally only the frequenc ...

  3. 详解Promise.race()可以解决多个异步请求那个请求先返回

    Promise.race([]);接受一个参数,由promise组成的一个数组: 它的返回结果是promise对象: 它的结果和状态由什么去决定呢? 由第一个改变Promise状态的对象去决定:若是返 ...

  4. 如何在centos7中完全卸载Python3

    如何在centos7中完全卸载Python3?根据查到的资料,主要就是卸载,然后删除一些软连接删除干净,逻辑很简单,贴一些具体的操作代码,记录下来 . 卸载Python3的步骤 #卸载python3 ...

  5. 从零开始匹配vim(2)——快捷键绑定

    如果说 vim有什么最吸引人,我想vim允许你自由的定义各种快捷键算是一个原因吧.你可以通过绑定各种快捷键来使经常使用的功能更加便利.通俗的讲,快捷键映射就是我按下某个键,我想让vim将它当成另一个键 ...

  6. 小白学k8s(11)-k8s中Secret理解

    理解Secret 什么是Secret Secret的类型 Opaque Secret Opaque Secret的使用 将Secret挂载到Volume中 挂载的Secret会被自动更新 将Secre ...

  7. 【主流技术】聊一聊对 Mybatis Plus 的理解与应用

    前言 mybatis plus是一个mybatis的增强工具,在其基础上只做增强不做改变.作为开发中常见的第三方组件,学习并应用在项目中可以节省开发时间,提高开发效率. 官方文档地址:MyBatis- ...

  8. 金融领域:产业链知识图谱包括上市公司、行业和产品共3类实体,构建并形成了一个节点10w+,关系边16w的十万级别产业链图谱

    金融领域:产业链知识图谱包括上市公司.行业和产品共3类实体,构建并形成了一个节点10w+,关系边16w的十万级别产业链图谱 包括上市公司所属行业关系.行业上级关系.产品上游原材料关系.产品下游产品关系 ...

  9. 三线表制作(word)

    三线表制作 转载:https://blog.csdn.net/zaishuiyifangxym/article/details/81668886

  10. 2.2 Windows驱动开发:内核自旋锁结构

    提到自旋锁那就必须要说链表,在上一篇<内核中的链表与结构体>文章中简单实用链表结构来存储进程信息列表,相信读者应该已经理解了内核链表的基本使用,本篇文章将讲解自旋锁的简单应用,自旋锁是为了 ...