QT设置子窗口弹出后,不允许点击父窗口的控件
时间: 2024-09-29 10:12:02 浏览: 80
pyqt5对用qt designer设计的窗体实现弹出子窗口test.zip
在Qt中,如果你想要创建一个子窗口,并希望这个子窗口打开后,用户无法通过点击父窗口的控件来操作子窗口,你可以通过设置子窗口的属性或者处理事件来实现这一点。通常,你可以:
1. **设置子窗口模式**:使用`QDialog::modal()`函数将子窗口设置为模态窗口。模态窗口会阻塞父窗口的所有输入,直到子窗口关闭。这意味着用户只能在子窗口内部交互。
```cpp
QDialog childWindow;
childWindow.setModal(true);
childWindow.show();
```
2. **遮罩父窗口**:如果子窗口不是模态的,可以考虑使用`setWindowFlags()`设置`Qt::WindowStaysOnTopHint`或者`Qt::Popup`,使子窗口置于父窗口之上,并阻止鼠标事件传递给父窗口。
```cpp
QDialog childWindow;
childWindow.setWindowFlags(childWindow.windowFlags() | Qt::WindowStaysOnTopHint);
childWindow.show();
```
3. **事件过滤**:在子窗口上添加事件过滤器,拦截来自父窗口的鼠标点击事件,然后忽略它们。
```cpp
QObject::connect(&childWindow, &QWidget::mousePressEvent, [&](QMouseEvent *event) {
if (event->window() != parentWidget) { // 确保点击的是子窗口
event->ignore(); // 忽略事件
}
});
```
阅读全文