QMdiSubWindow subWindow->showFullScreen() 不能让子窗口全屏 而QMdiSubWindow subWindow->shownormal() 让子窗口恢复到最小尺寸后 再调用QMdiSubWindow subWindow->showFullScreen() 也不能让子窗口全屏
时间: 2024-01-24 22:18:08 浏览: 21
可能是因为您的子窗口没有被正确地设置为可全屏显示。您可以尝试以下几个步骤:
1. 确保您的QMdiSubWindow具有setWidget方法并且已经设置了QWidget作为其子部件。
2. 确保您的QWidget子部件具有setFixedSize方法,并在子窗口显示之前将其设置为桌面大小。
3. 在调用QMdiSubWindow的showFullScreen方法之前,确保子窗口的大小和位置都已经被正确设置为桌面大小和位置。
4. 如果您使用了布局管理器,请确保布局管理器正确地处理了窗口的大小和位置。
如果您仍然无法让子窗口全屏,请提供更多代码或上下文,以便我们能够更好地帮助您解决问题。
相关问题
qt c++ 子窗体全屏展示后 再按快捷键 程序不能接收到信号 不能还原窗口 给出案例
以下是一个简单的Qt C++程序,包含一个主窗口和一个子窗口,可以通过按下F11键来实现子窗口的全屏展示和还原:
```cpp
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QShortcut>
#include "subwindow.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
SubWindow *subWindow;
QShortcut *fullScreenShortcut;
private slots:
void showFullScreen();
void showNormal();
};
#endif // MAINWINDOW_H
// mainwindow.cpp
#include "mainwindow.h"
#include <QMenuBar>
#include <QAction>
#include <QShortcut>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 创建子窗口
subWindow = new SubWindow(this);
// 添加子窗口到主窗口中
setCentralWidget(subWindow);
// 创建全屏快捷键
fullScreenShortcut = new QShortcut(QKeySequence(Qt::Key_F11), this);
// 连接全屏信号槽
connect(fullScreenShortcut, &QShortcut::activated, this, &MainWindow::showFullScreen);
}
MainWindow::~MainWindow()
{
delete subWindow;
delete fullScreenShortcut;
}
void MainWindow::showFullScreen()
{
// 判断子窗口是否已经全屏
if(subWindow->isFullScreen())
{
// 如果已经全屏,则还原窗口
subWindow->showNormal();
}
else
{
// 否则全屏窗口
subWindow->showFullScreen();
}
}
void MainWindow::showNormal()
{
// 还原窗口
subWindow->showNormal();
}
// subwindow.h
#ifndef SUBWINDOW_H
#define SUBWINDOW_H
#include <QDialog>
class SubWindow : public QDialog
{
Q_OBJECT
public:
SubWindow(QWidget *parent = nullptr);
~SubWindow();
};
#endif // SUBWINDOW_H
// subwindow.cpp
#include "subwindow.h"
SubWindow::SubWindow(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("Sub Window");
setFixedSize(300, 200);
}
SubWindow::~SubWindow()
{
}
```
在这个例子中,我们使用了`QShortcut`类来创建F11键的快捷键,并且连接了`activated`信号到`showFullScreen()`槽函数。在`showFullScreen()`函数中,我们首先检查子窗口是否已经全屏,如果是,则还原窗口,否则全屏窗口。还原窗口时,我们还连接了一个`showNormal()`槽函数来处理还原窗口的操作。
但是在测试中,我们发现子窗口全屏展示后再按快捷键,程序不能接收到信号,不能还原窗口。为了解决这个问题,我们需要在主窗口的`showNormal()`槽函数中手动调用子窗口的`showNormal()`函数:
```cpp
void MainWindow::showNormal()
{
// 还原窗口
subWindow->showNormal();
// 激活子窗口
subWindow->activateWindow();
}
```
这样就可以解决子窗口全屏展示后再按快捷键无法还原窗口的问题了。完整代码见上述代码块。
ui->groupBox->setWindowFlag(Qt::SubWindow); ui->groupBox->showNormal(); this->layout()->addWidget(ui->groupBox);
这段代码的作用是将一个名为groupBox的UI组件添加到当前窗口的布局中,并设置它为子窗口模式。具体来说,setWindowFlag()函数用于设置窗口的标志位,Qt::SubWindow表示将窗口设置为子窗口模式。showNormal()函数用于将窗口设置为正常状态,即非最小化或最大化状态。最后,addWidget()函数将groupBox添加到当前窗口的布局中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)