QT中设置页面全屏模式

1,147 阅读2分钟
 
  if (mainWindow)
  {
    app.setActivationWindow(mainWindow);
    PluginManager::removeObject(mainWindow);
    mainWindow->setWindowState(Qt::WindowFullScreen); // 设置窗口全屏
    app.installEventFilter(mainWindow);
  }
  return app.exec();

可以在main.cpp文件中设置mainwindow进行全屏运行


如果是希望在设置列表进行增加窗口模式和全屏模式的切换需要在setting页面进行设置,可以在Ui界面中创建一个checkbox的按钮进行窗口切换的绑定

 
    QMainWindow *mainWindow = qApp->activeWindow() ? qobject_cast<QMainWindow*>(qApp->activeWindow()) : nullptr;
    if (mainWindow) {
        if (pass) {
            mainWindow->setWindowState(Qt::WindowFullScreen);
        } else {
            mainWindow->setWindowState(Qt::WindowNoState);
        }

使用qApp全局变量和activeWindow()函数获取当前应用程序的活动窗口的指针。如果活动窗口不为空,则尝试将其强制转换为QMainWindow对象,使用了qobject_cast模板函数。如果转换成功,则将指向QMainWindow的指针存储在mainWindow变量中,否则设置为nullptr。

if语句检查pass变量是否为真或假。如果为真,则使用setWindowState()函数将mainWindow的窗口状态设置为全屏,使用了Qt::WindowFullScreen标志。如果pass为假,则将窗口状态设置为普通,使用了Qt::WindowNoState标志。

**> 但是当进入设置时如果是单独的对话框后qApp->activeWindow() 函数返回的是当前活动的窗口的指针,当前没有活动窗口,它将返回空指针。**

void  {
 
    QList<QWidget*> allWidgets = qApp->allWidgets();
    for (QWidget *widget : allWidgets) {
        QMainWindow *mainWindow = qobject_cast<QMainWindow*>(widget);
        if (mainWindow) {
            if (pass && !mainWindow->pass()) {
                mainWindow->showFullScreen();
            }
            else if (!pass && mainWindow->pass()) {
                mainWindow->showNormal();
            }
        }
    }
 
    _settings->setValue("Environment/FullscreenModeEnabled", isFullscreen);
 
    bool pass = false;
    for (QWidget *widget : allWidgets) {
        QMainWindow *mainWindow = qobject_cast<QMainWindow*>(widget);
        if (mainWindow && mainWindow->isFullScreen()) {
            pass = true;
            break;
        }
    }
    pass->setChecked(pass);
 
}

 此代码在界面上切换全屏模式时,将会对应用程序中的所有窗口进行全屏切换。请注意,如果某个窗口不支持全屏模式,或者当前窗口已经是全屏模式,则这些操作将不会生效。

Qt全屏显示函数 showFullScreen()

Qt最大化显示函数 showMaximized()

Qt最小化显示函数 showMinimized()

Qt窗口还原为正常状态 showNormal()

注:上述所有代码变量和函数均用pass代替