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代替