QT--气泡框的实现

提示:本文为学习记录,若有疑问,请联系作者,谦虚受教。


前言

实现自定义的气泡框,类似QToolTip的使用


一、h文件

#ifndef CUSTOMTOOLTIP_H
#define CUSTOMTOOLTIP_H


#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QTimer>

// 自定义的气泡提示框类
class CustomTooltip : public QWidget {
    Q_OBJECT
public:
    QString m_strToolTipInfo;
    CustomTooltip(const QString &text, QWidget *parent = nullptr) : QWidget(parent, Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint) {
        QLabel *label = new QLabel(text, this);
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(label);
        setLayout(layout);

        // 设置样式
       // setStyleSheet("QLabel { background-color: #ffffcc; border: 1px solid #8f8f91; border-radius: 5px; padding: 5px; }");
       setStyleSheet("QLabel{border:1px solid rgb(118, 118, 118); background-color: #2955a0; color:#ffffff; font-size:18px;border-radius: 5px;padding: 5px;} ") ;

    }
};

#endif // CUSTOMTOOLTIP_H

二、CPP文件

    // 隐藏之前的气泡提示框(如果存在)
    if (m_tooltip != nullptr) {
        m_tooltip->hide();
        delete m_tooltip; // 也可以在这里删除它,如果你不再需要它
        m_tooltip = nullptr;
    }
    // 创建一个新的气泡提示框并显示它
   m_tooltip = new CustomTooltip(strDisplayInfo, this);
   m_tooltip->move(QCursor::pos()); // 将提示框移动到鼠标当前位置
   m_tooltip->show();

鼠标判断移动到其他位置时,气泡框消失

/********************************************************
*事件过滤器
********************************************************/
bool MainWindow::eventFilter(QObject *watched, QEvent *event) {
    if (watched == this && event->type() == QEvent::MouseButtonPress) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        if ( (!this->rect().contains(this->mapFromGlobal(mouseEvent->globalPos())))
             ||  (!ui->tableView_Info->rect().contains(ui->tableView_Info->mapFromGlobal(mouseEvent->globalPos())))
             ) {
            if (m_tooltip != nullptr) {
                m_tooltip->hide();
            }
        }
    }
    if (QEvent::WindowDeactivate == event->type())
    {
        if (m_tooltip != nullptr) {
            m_tooltip->hide();
        }
    }
    // 继续标准事件处理
    return QWidget::eventFilter(watched, event);
}

总结

善于总结,多进一步。

相关推荐

  1. QT--气泡实现

    2024-05-26 06:52:30       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-26 06:52:30       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-26 06:52:30       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-26 06:52:30       87 阅读
  4. Python语言-面向对象

    2024-05-26 06:52:30       97 阅读

热门阅读

  1. LeetCode 968.监控二叉树 (hard)

    2024-05-26 06:52:30       49 阅读
  2. leetcode热题100.完全平方数(动态规划进阶)

    2024-05-26 06:52:30       48 阅读
  3. leetcode328-Odd Even Linked List

    2024-05-26 06:52:30       50 阅读
  4. C 语言设计模式(结构型)

    2024-05-26 06:52:30       46 阅读
  5. v-if 与 v-show(vue3条件渲染)

    2024-05-26 06:52:30       52 阅读
  6. kafka防止消息丢失配置

    2024-05-26 06:52:30       49 阅读
  7. Git 基础使用(4)标签管理

    2024-05-26 06:52:30       39 阅读
  8. Python库之lxml的简介、安装、使用方法详细攻略

    2024-05-26 06:52:30       42 阅读
  9. [AIGC] CompletableFuture如何实现任务链式调用?

    2024-05-26 06:52:30       36 阅读