qt c++ mdiarea控件的子窗体全屏展示后 再按快捷键 程序不能接收到信号 不能还原窗口
时间: 2023-08-15 18:06:14 浏览: 154
这个问题可能与快捷键的设置有关。在子窗口全屏展示后,快捷键可能被主窗口捕获,而不是被子窗口捕获。
你可以尝试在主窗口中设置一个事件过滤器来捕获子窗口的快捷键事件。具体步骤如下:
1. 为主窗口设置事件过滤器:
```cpp
// 在主窗口构造函数中设置事件过滤器
this->installEventFilter(this);
```
2. 实现事件过滤器:
```cpp
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
// 在这里处理快捷键事件
qDebug() << "shortcut override";
return true;
}
return QMainWindow::eventFilter(obj, event);
}
```
在事件过滤器中,我们判断事件类型是否为 `QEvent::ShortcutOverride`,如果是,就处理快捷键事件。注意要调用 `QMainWindow` 的 `eventFilter()` 函数来继续处理其他事件。
3. 在子窗口中设置快捷键:
```cpp
// 在子窗口构造函数中设置快捷键
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_Escape), this);
connect(shortcut, &QShortcut::activated, this, &QMainWindow::showNormal);
```
在子窗口中设置一个快捷键,当用户按下快捷键时,会调用 `QMainWindow` 的 `showNormal()` 函数来还原窗口。
这样做应该可以解决子窗口全屏展示后无法接收快捷键的问题。
阅读全文