qt写一个dialog 实现点击dialog之外dialog关闭
时间: 2023-10-14 11:07:49 浏览: 107
你可以使用setModal()函数设置对话框为模态对话框,然后使用setWindowFlags()函数设置对话框的窗口标志,使其在失去焦点时自动关闭。以下是示例代码:
```cpp
#include <QDialog>
#include <QEvent>
#include <QMouseEvent>
class MyDialog : public QDialog
{
public:
MyDialog(QWidget *parent = nullptr) : QDialog(parent)
{
setModal(true); // 设置为模态对话框
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
event->accept();
}
else
{
QDialog::mousePressEvent(event);
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
close();
event->accept();
}
else
{
QDialog::mouseReleaseEvent(event);
}
}
bool event(QEvent *event) override
{
if (event->type() == QEvent::WindowDeactivate)
{
close();
return true;
}
return QDialog::event(event);
}
};
```
在这个示例中,我们重载了 mousePressEvent() 和 mouseReleaseEvent() 函数,以便当用户点击对话框外部区域时关闭对话框。我们还重载了 event() 函数,以便当对话框失去焦点时自动关闭。使用 setWindowFlags() 函数,我们设置对话框的窗口标志,使其在失去焦点时自动关闭。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)