qt c++ mdiarea控件的子窗体全屏展示后 主程序中的QActionui.actionViewerFullScreen不能发射QAction::toggled信号,必须重新点击主界面后才能发射信号
时间: 2024-02-03 21:15:55 浏览: 87
这个问题可能是由于子窗口全屏后,它会遮盖住主界面中的QAction,导致QAction无法响应点击事件。你可以尝试在子窗口全屏时,将QAction所在的ToolBar隐藏,或者将QAction放在子窗口的ToolBar中。这样可以避免子窗口遮盖住QAction的问题,从而正确地发射信号。
另外,你还可以尝试使用Qt的信号槽机制,将子窗口全屏时的事件连接到主程序中的QAction的toggled信号上,这样可以在子窗口全屏时直接触发QAction的toggled信号。具体实现可以参考以下代码:
```
// 在子窗口中连接全屏事件到主程序中的actionViewerFullScreen的toggled信号上
connect(this, &MySubWindow::windowStateChanged, mainwindow->ui->actionViewerFullScreen, &QAction::toggled);
```
其中,`MySubWindow`是你的子窗口类名,`mainwindow`是你的主程序窗口指针,`mainwindow->ui->actionViewerFullScreen`是你的QAction对象。这样,当子窗口进入全屏状态时,就会自动触发QAction的toggled信号。
相关问题
qt c++ mdiarea控件的子窗体全屏展示后 再按快捷键 主程序中的QActionui.actionViewerFullScreen不能发射QAction::toggled信号,必须重新点击主界面后才能发射信号
这个问题可能是因为子窗体全屏展示后,焦点仍然在子窗体上,而不是主界面上。因此,快捷键并没有发送到主程序中的QAction。你可以尝试在mdiarea控件的子窗体的全屏模式中,将焦点转移到主程序中的QAction上,这样快捷键就可以发送到QAction了。
具体实现可以在子窗体的全屏模式中,使用QWidget::setFocusProxy()函数将焦点转移到QAction所在的QWidget上。例如,在子窗体的构造函数中添加以下代码:
```cpp
setFocusPolicy(Qt::StrongFocus);
QAction *fullScreenAction = mainWnd->findChild<QAction*>("actionViewerFullScreen");
setFocusProxy(fullScreenAction->parentWidget());
```
其中,mainWnd是主程序的指针,actionViewerFullScreen是主程序中QAction的对象名称。
这样,当子窗体进入全屏模式后,焦点会转移到主程序中的QAction上,快捷键就可以正常发送到QAction了。
qt c++ connect(ui.actionFullScreen, &QAction::toggled, this, &mainwindow::toggleFullScreen);收不到toggled信号
可能是因为QAction的toggled信号没有被正确连接到mainwindow的toggleFullScreen槽函数。
请确保:
1. QAction对象ui.actionFullScreen已经被正确创建,并且在UI设计中被正确命名。
2. 在mainwindow的构造函数中,确保已经将ui.actionFullScreen连接到mainwindow的toggled槽函数。可以使用如下代码:
```cpp
connect(ui.actionFullScreen, &QAction::toggled, this, &mainwindow::toggleFullScreen);
```
3. 在mainwindow中确保已经正确实现了toggleFullScreen槽函数。可以在该函数中添加一些调试信息,确保该函数能够被正确调用。
如果仍然无法收到toggled信号,请检查是否有其他代码覆盖了该信号的处理。
阅读全文