QT制作的软件全屏显示后最小化,点击任务栏图标打开时不是全屏

您所在的位置:网站首页 打开软件不在任务栏显示 QT制作的软件全屏显示后最小化,点击任务栏图标打开时不是全屏

QT制作的软件全屏显示后最小化,点击任务栏图标打开时不是全屏

2023-05-19 14:35| 来源: 网络整理| 查看: 265

QT制作的软件全屏显示后最小化,点击任务栏图标打开时不是全屏 前言

用QT做了一个小软件,把它自带的窗口栏给屏蔽了自己搞了关闭和最小化的按钮,且软件打开是全屏显示的。如今遇到的问题是,打开软件全屏显示后,我要干其他事情就点最小化窗口,后面通过任务栏的图标点开时,软件就不是全屏了,而是软件WindowNoState时候的尺寸。

找出原因

直接监听窗口状态变化的事件,看看最小化后到点击任务栏图标打开发生了什么事情。 在MainWindow中重写eventFilter()事件过滤函数 mainwindow.h中加入

protected: bool eventFilter(QObject* obj, QEvent* event); /* 事件过滤 */

mainwindow.cpp中实现

bool MainWindow::eventFilter(QObject *obj, QEvent *event) { Q_UNUSED(obj); if (event->type() == QEvent::WindowStateChange) { qDebug()showFullScreen();)

解决方法

在mainwindow.h中添加两个变量

private: Qt::WindowState m_eCurrentWindowState; /* 当前窗口状态 */ Qt::WindowState m_eOldWindowState; /* 之前窗口状态 */

在mainwindow.cpp改变了窗口状态的地方给这两个函数赋值

/* 初始化为无状态 */ void MainWindow::init_UI() { ... m_eCurrentWindowState = Qt::WindowNoState; m_eOldWindowState = Qt::WindowNoState; } /* 全屏显示时 */ void MainWindow::login_success(QString name, QString code) { ... this->showFullScreen(); m_eCurrentWindowState = Qt::WindowFullScreen; // 修改当前窗口状态为全屏 } /* 最小化时 */ void MainWindow::on_btn_minimize_clicked() { this->setWindowState(Qt::WindowMinimized); m_eCurrentWindowState = Qt::WindowMinimized; // 修改当前状态为最小化 m_eOldWindowState = Qt::WindowFullScreen; // 修改之前状态为全屏 }

在mainwindow.cpp刚才的事件过滤函数中实现

bool MainWindow::eventFilter(QObject *obj, QEvent *event) { Q_UNUSED(obj); /* 避免最小化后再打开不是全屏显示 */ if (event->type() == QEvent::WindowStateChange) { if (m_eCurrentWindowState == Qt::WindowMinimized && m_eOldWindowState == Qt::WindowFullScreen) { this->showFullScreen(); m_eOldWindowState = Qt::WindowMinimized; m_eCurrentWindowState = Qt::WindowFullScreen; } } return true; }

ok,这样就可以最小化后打开还是全屏了。如果只有最小化和全屏两个状态的话只需要在最小化时修改那两个参数的状态就行了,如果过是最小化、全屏和最大化多个状态的话就要再优化一下代码了。

参考资料

http://www.lgwimonday.cn/archives/2052

结尾

希望能够帮助到您哦~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3