可能的Qt5错误:调用setFixedSize()会禁用主窗口的关闭按钮(在Win7下)

问题描述 投票:1回答:1

我发布此邮件主要是因为我浪费了一些时间来寻找解决方案,并且出于好奇。

根据受欢迎的要求,逐步制作示例:

  1. 从Qt设计器创建一个Qt小部件项目。将所有选项保留为默认选项,项目名称除外(我称其为“ bob”)。将构建目标设置为MinGW X64

  2. 使用默认的自动生成的代码框架编译并启动可执行文件(我在调试模式下完成了该任务,但是发布也不起作用)。检查主窗口是否可调整大小,并且右上角的关闭按钮是否按预期工作。

  3. 打开文件“ mainwindow.cpp”,然后像这样添加setFixedSize调用:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        setFixedSize(geometry().size()); // <--- this line added
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
  4. 重新编译,重新启动,并检查窗口现在是否拒绝调整大小(应该如此),并且关闭按钮不再关闭窗口,而是允许将其拖动,就像单击标题栏一样(它不应该)。

根据较受欢迎的要求,我认为上述howto详细指南是该问题的可复制示例的原因

最小:

检查

最小且可读:

检查

确保重现该问题所需的所有信息是包含在问题本身中:

检查

为您包含的每个文件或代码段使用单独的代码块。为每个块的目的提供描述:

检查,除非您要我将Qt小部件项目的所有默认文件都转储到那里。

描述问题:

完成两次。

使用简短但描述性的问题摘要作为标题您的问题:

检查

消除与该问题无关的所有问题:

努力,但显然取得的成功有限

仔细检查您的示例是否再现了问题:

大量检查。

它可能有助于关闭系统并重新启动它,或运输一个新环境的示例,以确认它确实提供了问题示例:

[抱歉,伙计们,但我不想重新格式化PC只是为了解决容易解决的陈旧问题。我主要是出于好奇,也是出于对可能遇到相同问题的程序员的礼貌而发布的,我认为我已经做够了。

所以现在,对于问题的描述:

[显然,在标准Qt Widgets应用程序的主窗口构造函数中调用setFixedSize(geometry().size())(根据this venerable Qt forums thread的建议)具有使Windows 7系统上的系统关闭按钮无效的奇怪副作用。

仿佛单击事件只是通过按钮触发,单击它只会捕获窗口并允许将其拖动到周围,但不会将其关闭。除此之外,一切都按预期工作(窗口变为不可调整大小,右下角的调整大小手柄处于不活动状态,您仍然可以通过其他标准方式(例如Alt + F4等)关闭窗口)。

使主窗口固定大小的有效方法(尽管平台特定)是调用setWindowFlags(windowFlags() | Qt::MSWindowsFixedSizeDialogHint);设置用户界面之前(ui->setupUi(this);

我仍然对这种令人惊讶的行为感到好奇。有一个显而易见的原因为什么更改布局管理器的行为参数会使系统按钮混乱?我在这里做错什么了吗?这是可复制的错误,还是PC上本地问题的奇怪后果-可能是错误的安装或配置?

我正在使用基于Qt 5.14.0的Qt Creator 4.11.0,并将MinGW X64用作(法语)Win7 OS的目标(出于某种原因,处于测试模式,但我怀疑OS应该归咎于此) 。

c++ qt qt5 qmainwindow
1个回答
1
投票

[根据官方的错误跟踪器https://bugreports.qt.io,确实存在一个影响某些版本的错误(可能是Qt 5.12.5引入的回归)。

请看一下:

https://bugreports.qt.io/browse/QTBUG-79922

https://bugreports.qt.io/browse/QTBUG-78262

https://bugreports.qt.io/browse/QTBUG-78656

但是,他们报告此问题已在Qt 5.14中修复,并反向移植到Qt 5.13.2。

您正在使用通过Qt 5.14编译的Qt Creator,但对于我来说还不清楚是否还要针对Qt 5.14或其他版本编译应用程序。用来编译Qt Creator的版本和用于代码的工具包显然是两件事。因此,我建议检查您是否确实在使用应该具有此修复程序的版本编译应用程序,如果是,则将问题报告给bugreports.qt.io

因为这是Qt的错误,所以我们在这里不能做很多...

© www.soinside.com 2019 - 2024. All rights reserved.