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()<< this->windowState();    //打印窗口状态}return QObject::eventFilter(obj, event);
}

后面打印出来的结果是这样的

QFlags<Qt::WindowState>(WindowNoState)
QFlags<Qt::WindowState>(WindowFullScreen)
QFlags<Qt::WindowState>(WindowNoState)
/* 点击最小化 */
QFlags<Qt::WindowState>(WindowMinimized)
QFlags<Qt::WindowState>(WindowMinimized)
/* 通过任务栏图标打开软件 */
QFlags<Qt::WindowState>(WindowNoState)

我们可以看到点任务栏打开后窗口的状态变为了WindowNoState,所以我们应该在这个时候再次执行让窗口全屏显示的代码(this->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 QObject::eventFilter(obj, event);
}

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

注意

上述代码最后使用了

return QObject::eventFilter(obj, event);

的意思是再进行一次QT自带的过滤流程。
一开始我是直接return true;的,后面发现这样子会把其他信号与槽,定时器这些事件全部过滤了,所以大家需要注意这一点。

参考资料

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

结尾

希望能够帮助到您哦~

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

  1. Qt 窗口的一些简单设置-标题、图标、最大化最小化按钮、任务栏图标

    一些很零散的窗体控制方法,在这总结一些. 1.更改窗体标题 this->setWindowTitle("窗体标题"); 窗体标题"就是更改的窗体标题 2.控制窗体大 ...

  2. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

    一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() {if (m_flags == NULL){m_flags = windowFl ...

  3. VMWare 全屏后最小化死机

    VMWare 全屏后最小化死机 今天在vmware7上安装ubuntu10.10,为编译opendjk做准备.在精简系统的时候,全屏vmware后,在最小化就死机了. 自己都用这个vmware安装了1 ...

  4. 使用Qt制作记事本软件程序

    原创:http://blog.csdn.net/u013383042/article/details/50689080 使用Qt制作记事本软件,实现了打开,保存,另存,关闭,关于等功能. 并且实现了软 ...

  5. win7系统计算机无最小化,win7纯净版系统任务栏无法显示网页最小化窗口怎么办...

    最近有位用户说win7纯净版任务栏无法显示网页最小化窗口,一般情况下,我们在使用浏览器完都会直接点击窗口最小化,网页窗口最小化到任务栏上.要使用的时候只要单击就可以将任务栏浏览器恢复到最大化,以方便网 ...

  6. win7计算机窗口无法最小化,win7系统任务栏无法显示网页最小化窗口的解决方法...

    很多小伙伴都遇到过win7系统任务栏无法显示网页最小化窗口的困惑吧,一些朋友看过网上零散的win7系统任务栏无法显示网页最小化窗口的处理方法,并没有完完全全明白win7系统任务栏无法显示网页最小化窗口 ...

  7. html如何让窗口不在任务栏显示,电脑最小化窗口后无法在任务栏中显示怎么解决...

    ‍ 我们知道在电脑系统中打开的程序,可以点击最小化,这样可以暂时不显示该程序的窗口,然后可以从任务栏中点击再次打开.但有用户却发现无法在任务栏上显示已经被最小化的窗口.接下来系统城小编会提供几种方法, ...

  8. 计算机屏幕节电模式,显示器黑屏显示省电模式是怎么回事_电脑显示屏省电模式黑屏如何解决...

    最近有不少用户在使用电脑的时候,发现电脑的显示器突然黑屏,并显示省电模式,给用户们带来了很多困扰,许多用户高不知道显示器黑屏显示省电模式是怎么回事,为了帮助到大家,本文给大家讲解一下电脑显示屏省电模式 ...

  9. Android 点击APP桌面图标启动时黑屏或者白屏

    问题:当APP添加了闪屏页后,可能会出现点击桌面图标启动APP时先黑屏或者白屏后,再显示闪屏页,不利于用户体验. 解决: 1.解决方法很简单,在APP的style资源文件中添加如下代码: <st ...

最新文章

  1. Laravel 底层是如何处理 HTTP 请求的?
  2. 牛妹吃豆子(二维前缀和模板,修改+求和)
  3. .net之 datagrid
  4. 【数据库系统概论】考研第五部分重点分析【5.1】
  5. java重定向设置header_java – 重定向时将标题添加到Zuul
  6. 20180705 考试记录
  7. Python多线程编程基础2:如何创建线程
  8. BZOJ 1179: [Apio2009]Atm Tar$滑稽 ra$jan
  9. OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
  10. 关于 TApplication 详解 六 ---- TColorDialog
  11. 智能网关服务器,边缘计算网关和智能网关区别?
  12. 台式计算机能装蓝牙吗,台式机如何安装蓝牙
  13. 华为java一个月写多少行代码_[财经]阿里员工吐槽华为:面试官1万行代码都没写过? - 南方财富网...
  14. 阿里云服务器:域名解析步骤
  15. mac如何升级node版本
  16. Java实现三角形图案绘制**
  17. 如何用arcgis修改栅格文件的波段数?
  18. Kafka教程(一)Kafka入门教程
  19. 把黄鸟hcy请求转换为autojs请求
  20. 18个接私活的平台:

热门文章

  1. ipvsadm命令总结
  2. 深度访谈丨工作13年的程序员老兵,当初为何选择Java?现在后悔吗?
  3. 【华为机试真题 JAVA】数组拼接-100
  4. 刚看到的《当幸福来敲门》体会浓缩版
  5. 【算法】【华为】2019华为笔试 找终点:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数,
  6. insgram 网页分享_iOS - 实现Instagram分享
  7. 小度路由器离线下载根本就是垃圾
  8. 3. 什么是JSR参考实现? - JavaEE基础系列
  9. 福布斯富豪榜结果出炉,王健林财富缩水682.4亿元
  10. 牛是怎么死的?看懂了思想至少成熟30年