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);
}
相关推荐
四维碎片8 小时前
【Qt】UDP跨平台调试工具
qt·学习·udp
踏过山河,踏过海9 小时前
【用ui文件做个简单工具的开发,为什么修改完ui后,程序重新编译运行后,GUI界面还是不变呢?】
qt·ui
向阳开的夏天10 小时前
麒麟V10源码编译QT5.6.3 (x86 & arm64)
开发语言·qt
打码的猿12 小时前
Qt对话框不锁死主程序的方法
开发语言·qt
小小码农Come on15 小时前
Qt Creator常用设置
qt
wkm95617 小时前
在arm64 ubuntu系统安装Qt后编译时找不到Qt3DExtras头文件
开发语言·arm开发·qt
小小码农Come on19 小时前
QT开发环境安装
开发语言·qt
小小码农Come on19 小时前
QT内存管理
开发语言·qt
有理想的打工人19 小时前
QT的安装
qt
SilentSlot21 小时前
【QT-QML】8. 输入元素
qt·qml