QT 点击窗口外区域 当前窗口自动关闭

想要通过弹出自定义窗口展示自定义的一些信息,同时也希望像右键菜单一样(点击非菜单区域,菜单自动关闭)的效果,那么你可以按照以下两种方式进行尝试:

设置窗口标识的方式

  • 在构造函数中添加以下代码:
cpp 复制代码
this->setWindowFlags(Qt::Popup);
  • 重写MousePressEvent
cpp 复制代码
void YourDialog::mousePressEvent(QMouseEvent *e)
{
    this->setAttribute(Qt::WA_NoMousReplay);//避免重复触发窗口外的鼠标点击事件(仅关闭窗口)
    QWidget::mousePressEvent(e);
}

关于setAttribute(Qt::WA_NoMousReplay),它会拦截鼠标事件不会传递,专用于弹窗事件

事件过滤的方式

cpp 复制代码
bool YourWidget::event(QEvent * e)
{
	if (QEvent::Show == e->type())
	{
		activateWindow();
	}
	else if (QEvent::WindowDeactivate == e->type())
	{
		this->close();
	}
	return QWidget::event(e);
}

//简版代码
bool ClassName::event(QEvent *event)
{
    if (event->type() == QEvent::ActivationChange)
    {
        if(QApplication::activeWindow() != this)
        {
            this->close();
        }
    }
    return QWidget::event(event);
}
相关推荐
小短腿的代码世界3 小时前
Qt行情协议解析与二进制编解码优化:从FIX到自定义协议的全链路架构
开发语言·qt·架构
luoyayun3615 小时前
Qt/QML + FFmpeg 实现多音频文件顺序拼接功能
qt·ffmpeg·音频拼接
Strugglingler7 小时前
【Qt,OpenGL, RHI,Wayland 等概念梳理】
qt·opengl·wayland·rhi·x11·egl·glx
小短腿的代码世界10 小时前
Qt对象树析构链与智能指针协同:零泄漏内存管理架构
开发语言·qt·架构
小庞在加油10 小时前
从qmake到CMake+VSCode:Qt项目现代化迁移与AI提效实战指南
vscode·qt·ai·ai工具
小短腿的代码世界12 小时前
Qt定时器高精度架构:从QTimer源码到纳秒级定时调度
数据库·qt·架构
尘中远12 小时前
Qt高性能绘图库QIm——实现二维三维科学绘图
开发语言·qt·信息可视化
人还是要有梦想的14 小时前
QT qml布局讲解
qt·布局·qml
小短腿的代码世界15 小时前
Qt交易系统审计日志与合规追踪引擎:从零构建金融级不可篡改日志架构
qt·金融·架构
sycmancia15 小时前
Qt——自定义模型类
开发语言·qt