QT 子窗体 最大化 界面显示不对

QT  子窗体 最大化 复原 遇到的问题

  项目中有个需求,主窗体中嵌套子窗体,需要将子窗体最大化显示和复原。

      查了很多资料,基本上都是提到:QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗口模式的部件有用。子窗口的特征是 Qt::SubWindow,不是独立的窗口。因此对其调用showFullScreen()无效。通过对对子窗口调 用:setWindowFlags(Qt::Dialog);或setWindowFlags(Qt::Window);将其设为窗口模式后,即可调用 showFullScreen();进行全屏显示了。

        如果要还原为普通窗口,调用setWindowFlags(Qt::subwindow)将子窗口设置为非顶级窗口,再调用showNormal()还原子窗口显示。

  https://www.cnblogs.com/dyllove98/archive/2013/07/15/3191909.html

        

  m_Win->setWindowFlags(Qt::Window);
  m_Win->showFullScreen();

      问题: 该方法确实可行,可以最大化,但是遇到一个问题,最大化后的界面部分操作和显示不正确,例如有些线无法移动,button点击没有按下的效果。

    解决办法:设置windowstate为最大化

m_Win->setWindowFlags(Qt::Window);
m_Win->showFullScreen();
m_Win->setWindowState(Qt::WindowMaximized);

 

转载于:https://www.cnblogs.com/0523jy/p/9667657.html

Qt的多文档界面(MDI)应用程序中,实现窗口双击最大化是一个常见的需求。这通常涉及到对窗口的事件处理,具体来说是重写QMdiSubWindow的事件处理函数来捕获鼠标双击事件,并进行相应的最大化操作。以下是实现这一功能的基本步骤: 1. 继承QMdiSubWindow类,并重写事件处理函数。 2. 在重写的事件处理函数中,检查事件类型是否为鼠标双击事件。 3. 如果是双击事件,执行最大化操作。可以调用QMdiSubWindow的showMaximized()方法来实现窗口的最大化。 4. 使用eventFilter函数来安装事件过滤器,这样可以在窗口接收到任何事件之前进行处理。 下面是一个简化的示例代码,展示了如何实现这一功能: ```cpp // MyMdiSubWindow.h #ifndef MYMDISUBWINDOW_H #define MYMDISUBWINDOW_H #include <QMdiSubWindow> class MyMdiSubWindow : public QMdiSubWindow { Q_OBJECT public: MyMdiSubWindow(QWidget *parent = nullptr); protected: bool eventFilter(QObject *obj, QEvent *event) override; }; #endif // MYMDISUBWINDOW_H // MyMdiSubWindow.cpp #include "MyMdiSubWindow.h" MyMdiSubWindow::MyMdiSubWindow(QWidget *parent) : QMdiSubWindow(parent) { // 设置窗口的一些属性 setWindowFlags(windowFlags() | Qt::CustomizeWindowHint); // 安装事件过滤器 installEventFilter(this); } bool MyMdiSubWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == this && event->type() == QEvent::MouseButtonDblClick) { // 双击时最大化窗口 showMaximized(); return true; // 表示事件已被处理 } return QMdiSubWindow::eventFilter(obj, event); // 其他事件按默认处理 } ``` 在主窗口中使用这个自定义的MyMdiSubWindow来代替标准的QMdiSubWindow即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值