当前位置: 首页 > news >正文

QToolTip+QSS

QToolTip本质上只是一个调用者,被调用的其实是一个被设置了Qt::ToolTip标志的QLabel,而且它比QLabel多了一个QSS属性:
opacity气泡整体的透明度

富文本显示

因为QLabel本身是支持富文本的,所以气泡也支持富文本也不足为奇。我们来看几个示例

啤酒是一个正常的文本:

啤酒

饮料显示了一个图片:

<html><head/><body> <p><img src=":/images/26.png"/></p> </body></html>

矿泉水显示了很大的字

<html><head/><body> <p><span style=" font-size:72pt; font-weight:600;">矿泉水</span></p> </body></html>

小推车售卖员显示比较长的一段字 \n可以用来手动换行

啤酒饮料矿泉水,花生瓜子八宝粥。来,腿收一下哈!\n啤酒饮料矿泉水,红茶绿茶八宝粥,前面的让一让哈!

简单样式

QToolTip { background-color: #ccc; color: #ffffff; border: 1px solid #555555; border-radius: 5px; padding: 5px 10px; font-size: 13px; opacity: 120; }

可以看到,虽然加了opacity属性,但是实际没啥效果呀~ (再次强调,本豆用的是Qt5.12.10版本,因为原来在其它的Qt版本上用了,是有效果的,不确定是不是版本问题),既然如此我们只好另辟蹊径了。

class ToolTipFilter : public QObject { Q_OBJECT protected: bool eventFilter(QObject* obj, QEvent* event) override { if (event->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event); QWidget* w = qobject_cast<QWidget*>(obj); if(w && !w->toolTip().isEmpty()) { QToolTip::showText(helpEvent->globalPos(), w->toolTip()); for(auto widget : qApp->topLevelWidgets()) { if(widget->objectName() == "qtooltip_label") { widget->setWindowOpacity(0.2); break; } } } else { QToolTip::hideText(); event->ignore(); } return true; } else { return QObject::eventFilter(obj, event); } } }; //再在main函数中加上这段 int main(int argc, char *argv[]) { QApplication a(argc, argv); a.installEventFilter(new ToolTipFilter); //<---关键代码 ... }

拦截全局的气泡消息,找到ObjectName为qtooltip_label的顶级Widget,为什么是qtooltip_label呢?因为本豆芽又去翻了源码。


然后强行给它加上0.2的透明度setWindowOpacity(0.2),这时候再看看我们的气泡就能老老实实的透明了。

完全自定义气泡

简单实现一个没有背景的气泡:

class CustomToolTip : public QLabel { public: explicit CustomToolTip(QWidget* parent = nullptr) : QLabel(parent, Qt::ToolTip | Qt::FramelessWindowHint) { setAttribute(Qt::WA_TranslucentBackground); setStyleSheet("color:red;"); } static CustomToolTip* instance; static void showToolTip(const QString& text, const QPoint& pos, QWidget *p) { delete instance; instance = new CustomToolTip(p); instance->setText(text); instance->move(pos + QPoint(0, 5)); instance->show(); } static void hideToolTip() { instance->hide(); } };

修改刚才拦截的代码,收到气泡事件时让它弹出我们自定义的气泡

class ToolTipFilter : public QObject { Q_OBJECT protected: bool eventFilter(QObject* obj, QEvent* event) override { if (event->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event); QWidget* w = qobject_cast<QWidget*>(obj); if(w && !w->toolTip().isEmpty()) { // QToolTip::showText(helpEvent->globalPos(), w->toolTip()); // for(auto widget : qApp->topLevelWidgets()) // { // if(widget->objectName() == "qtooltip_label") // { // widget->setWindowOpacity(0.2); // break; // } // } CustomToolTip::showToolTip(w->toolTip(), helpEvent->globalPos(), w); } else { // QToolTip::hideText(); CustomToolTip::hideToolTip(); event->ignore(); } return true; } else { return QObject::eventFilter(obj, event); } } };

效果是有了,但是我们的这个气泡比官方的气泡效率要低,只是出于演示目的所以没有做优化,有需要的小伙伴可以参考官方的代码自行实现下,或者直接用AI生成一个。

http://www.jsqmd.com/news/252670/

相关文章:

  • 基于可变形自注意力的YOLOv11:目标检测性能优化实践
  • 无感化签到监测与自动告警系统源码,及时传递安全异常信号
  • *目标检测性能革新:基于可变形自注意力机制的YOLOv11深度优化实战**
  • 个人云盘|基于springboot + vue个人云盘系统(源码+数据库+文档)
  • 健身房管理|基于springboot + vue健身房管理系统(源码+数据库+文档)
  • 《创业之路》-865-如何利用下述分析方法找到并提前布局未来有爆发性潜力的公司:四阶价值流 × 商业模式画布 × 产品生命周期 × 创新 × 技术曲线 × 第二增长曲线 × 上中下游生态?
  • 计算机毕业设计Hadoop+Hive+Spark机票价格预测 机票可视化大屏 大数据毕业设计(源码+文档+PPT+ 讲解)
  • 论文“双重焦虑”?别慌!降重与降AI痕迹的终极指南与利器分享
  • 基于Python 企业人力资源管理系统(源码+数据库+文档)
  • 基于Python医院信息管理系统(源码+数据库+文档)
  • 万字长文!开题报告保姆级攻略,让你的论文赢在起跑线
  • 基于Python 企业员工管理系统(源码+数据库+文档)
  • Hippo通路激酶LATS1/2(Ser909/872)如何调控肠道干细胞的命运与Wnt信号?
  • 别用手工磨问卷了!AI辅助设计,让你的毕业论文问卷又快又科学
  • 免疫球蛋白G3(IgG3)如何通过干扰B细胞受体功能调控HIV感染者的免疫应答?
  • 搞定毕业设计和实习报告,可以很简单?
  • NF-κB信号通路中p105/p50的生成与调控机制是什么?
  • 警情数据可视化分析|基于Python + vue警情数据可视化分析系统(源码+数据库+文档)
  • mTOR(Ser2448)磷酸化如何揭示其信号网络的调控核心?
  • 商品评论分析|基于Python + vue商品评论分析系统(源码+数据库+文档)
  • 基于Python + Django医院信息管理系统(源码+数据库+文档)
  • vue基于Python大学生家校信息共享平台 flask django Pycharm
  • 基于Python + Django企业人力资源管理系统(源码+数据库+文档)
  • LRP6 (Ser1490)如何调控心肌旁分泌以抑制压力超负荷心脏纤维化?
  • AI健康管理|基于springboot AI健康管理系统(源码+数据库+文档)
  • Python bool 类型常用方法与实战指南:极简类型的高效用法
  • 基于Python 智慧社区系统(源码+数据库+文档)
  • 救命神器2026专科生必看!8款一键生成论文工具深度测评
  • springboot基于协同过滤算法的运动场馆服务平台设计与实现
  • 电子政务服务管理|基于springboot 电子政务服务管理系统(源码+数据库+文档)