Qt实现弹出窗口,点击其他位置消失
Qt实现弹出窗口,点击其他位置消失
一开始时想的很美好,写button的点击事件,然后在弹窗界面中写eventFilter(QEvent *e)事件
1 | if (event->type() == QEvent::ActivationChange) |
但是这样写发现一个问题,当我想实现点击按钮也可以关闭dialog时,不行了,因为EventFilter是第一触发事件,当我点按钮是,判断当前的活动窗口不是dialog,他先关闭,然后触发按钮的点击事件,再打开了dialog。很麻烦。
后来有了解到Qt有一个popup的属性
1 | info->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup); |
这样设置了之后,窗口是无边框且是点击其他位置关闭,但是还是会有上面的问题,没解决。
再后来,在一篇blog中看到了Qt::WA_NoMouseReplay属性
机翻一下:用于弹出窗口小部件。指示在弹出小部件关闭时不应重播最近的鼠标按下事件。该标志由小部件的作者设置,并在小部件每次接收到新的鼠标事件时由Qt内核清除。
大意就是它会拦截鼠标事件不会传递,专用于弹窗事件。
呜呜呜,原来Qt早就搞定了这个事件,找了半天,还是Qt不熟悉。
具体使用,在弹出的窗口里重写mousePressEvent(QMouseEvent *e)事件:
1 | void InfoDialog::mousePressEvent(QMouseEvent *e) |
Qt实现弹出窗口,点击其他位置消失
You need to set
install_url
to use ShareThis. Please set it in _config.yml
.