簡體   English   中英

可能的 Qt5 錯誤:調用 setFixedSize() 禁用主窗口的關閉按鈕(在 Win7 下)

[英]Possible Qt5 bug: calling setFixedSize() disables the main window's close button (under Win7)

我發布這個主要是因為我浪費了一點時間摸索解決方案,也是出於好奇。

根據流行的要求,一步一步可重現的例子:

  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. 重新編譯,重新啟動並檢查窗口現在是否拒絕調整大小(應該如此),並且關閉按鈕不再關閉窗口,但允許將其拖動,就像您單擊標題欄一樣(它應該't)。

根據更受歡迎的要求,為什么我認為上述 howto 詳細指南是問題的可重現示例

最小:

查看

最小且可讀:

查看

確保問題本身包含重現問題所需的所有信息:

查看

為您包含的每個文件或片段使用單獨的代碼塊。 為每個塊的用途提供描述:

檢查,除非您希望我在那里轉儲 Qt 小部件項目的所有默認文件。

描述問題:

完成,兩次。

使用簡短但描述性的問題摘要作為問題的標題:

查看

消除與問題無關的任何問題:

努力嘗試,但顯然收效甚微

仔細檢查您的示例是否重現了問題:

檢查,豐富。

關閉系統並重新啟動它可能會有所幫助,或者將示例傳輸到新環境以確認它確實提供了問題的示例:

好吧,對不起,伙計們,我不想重新格式化我的電腦只是為了解決一個很容易解決的陳腐問題。 我主要是出於好奇而發布這篇文章,也是對可能遇到同樣問題的程序員的禮貌,我想我現在已經做得足夠了。

所以現在,對於問題的描述:

顯然,調用setFixedSize(geometry().size())在標准的Qt Widgets應用程序(如建議在主窗口中構造這所古老的Qt論壇線程)有我的Windows 7系統上無效的系統關閉按鈕的奇怪的副作用.

就好像點擊事件剛剛落下按鈕一樣,點擊它只會抓住窗口並允許拖動它,但不會關閉它。
除此之外,一切都按預期工作(窗口變得不可調整大小,右下角的調整大小手柄處於非活動狀態,您仍然可以通過其他標准方式如 Alt+F4 等關閉窗口)。

使主窗口固定大小的工作(盡管特定於平台)方法是調用
setWindowFlags(windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
在設置用戶界面之前( ui->setupUi(this);

我仍然對這種令人驚訝的行為感到好奇。
為什么更改布局管理器的行為參數會弄亂系統按鈕,是否有明顯的原因?
我在這里做錯了嗎?
這是一個可重現的錯誤,還是我 PC 上本地問題的奇怪后果 - 可能是安裝或配置錯誤?

我正在使用基於 Qt 5.14.0 的 Qt Creator 4.11.0,將 MinGW X64 作為(法國)Win7 操作系統上的目標(處於測試模式,出於某種原因,但我懷疑這里應該歸咎於操作系統)。

根據官方錯誤跟蹤器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 的錯誤,因此我們在這里無能為力...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM