提示:本文为学习记录,若有疑问,请联系作者,谦虚受教。
前言
实现自定义的气泡框,类似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);
}
总结
善于总结,多进一步。