zoukankan      html  css  js  c++  java
  • Qt 界面最大化的使用注意点

    在我的这个程序里面需要实现如下功能:
    1.界面最大化
    2.界面去掉标题栏
    3.显示界面
    4.显示界面的时候重新设置界面里面控件的大小
    代码如下:

    1 maxPicShowForm.setWindowState(Qt::WindowMaximized);//界面最大化
    2 maxPicShowForm.setWindowFlag(Qt::FramelessWindowHint);//去掉标题栏
    3 maxPicShowForm.show();//显示界面
    4 maxPicShowForm.maxSizeImg();

    maxPicShowForm是我定义的QWidget对象,在这里作为一个窗口界面,
    maxSizeImg()函数内容如下:

    1 void MaxPicShowForm::maxSizeImg()
    2 {
    3     ui->ImageGraphic->setGeometry(0,0,this->width(),this->height());
    4 }

    在运行过程中,我发现界面最大化显示之后,maxSizeImg()里面获取到的窗口宽和高居然不是显示器的宽和高,而是400x500,也就是这个界面的初始大小!!!
    后来我在MaxPicShowForm类里面重写了resizeEvent函数,

    virtual void resizeEvent(QResizeEvent *event);

    然后惊奇地发现程序运行完show();
    这行函数之后,居然进了2次resizeEvent()函数,
    第一次进去的时候窗口大小为400x500,第二次进去的时候窗口大小就变成1920x1080了,
    而我的maxSizeImg();是在第二次resizeEvent之前执行的,所以获取到的窗口大小不对。

    后来我思考了一下,想想也对,show()只是发了一个信号给了MaxPicShowForm类,通知他显示窗口,但发了消息之后程序是不会管MaxPicShowForm接到信号之后的操作是否执行完的,而是直接就运行了show()下面一行的代码。

    所以正确的操作应该是把maxSizeImg()里面的代码放在resizeEvent()函数里面。
    这样就能实现窗口大小变更的同时,里面的控件大小跟着改变。

    顺便记录一下获取系统桌面大小的函数:

    1 QDesktopWidget* desktopWidget = QApplication::desktop();
    2 //得到客户区矩形1920*1030(因为桌面上的任务栏会占用50像素)
    3 QRect clientRect = desktopWidget->availableGeometry();
    4 //得到应用程序矩形1920*1080
    5 QRect applicationRect = desktopWidget->screenGeometry();

    对了,再记录一个坑:
    如果把

    maxPicShowForm.show();

    放在

    maxPicShowForm.setWindowFlag(Qt::FramelessWindowHint);//去掉标题栏

    前面的话,程序开启后,第一次执行完setWindowFlag()之后,会直接触发maxPicShowForm的hideEvent(QHideEvent *event)事件,而第二次执行上述代码的时候,不会触发hideEvent(QHideEvent *event)事件,这样带来的问题就是,程序启动之后,第一次显示maxPicShowForm子窗口永远都没法显示,只有第二次才能正常显示。
    所以结论是:
    要把show()的代码位置放在setWindowFlag()后面!

  • 相关阅读:
    Mybatis——逆向工程
    Mybatis——Spring整合
    Mybatis——缓存机制
    Mbatis——动态SQL
    Mybatis_映射文件配置
    Mybatis XML 配置文件
    渣渣小本求职复习之路每天一博客系列——数据结构与常用算法(2)
    渣渣小本求职复习之路每天一博客系列——数据结构与常用算法(1)
    渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(5)
    渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(4)
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13862477.html
Copyright © 2011-2022 走看看