From 72db9f09ff9f01a8a1646748a8dfce8b0128230b Mon Sep 17 00:00:00 2001 From: zeljan1 Date: Tue, 3 Jun 2025 18:44:28 +0200 Subject: [PATCH] Qt6: fixed rare crash when QMainWindow is destroyed, removed unneeded FMenuBar.Widget destructor, it will be freed by it's parent. --- lcl/interfaces/qt6/qtwidgets.pas | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lcl/interfaces/qt6/qtwidgets.pas b/lcl/interfaces/qt6/qtwidgets.pas index 4db4299290..91042620c3 100644 --- a/lcl/interfaces/qt6/qtwidgets.pas +++ b/lcl/interfaces/qt6/qtwidgets.pas @@ -6007,9 +6007,14 @@ var begin if (Widget <> nil) and FOwnWidget then begin - ALCLEvent := QLCLMessageEvent_create(LCLQt_DestroyWidget, 0, + if QObject_inherits(Widget, 'QMainWindow') then + QMainWindow_Destroy(QMainWindowH(Widget)) + else + begin + ALCLEvent := QLCLMessageEvent_create(LCLQt_DestroyWidget, 0, 0, 0, 0); - QCoreApplication_postEvent(Widget, ALCLEvent, Ord(QtHighEventPriority)); + QCoreApplication_postEvent(Widget, ALCLEvent, Ord(QtHighEventPriority)); + end; end; Widget := nil; end; @@ -7403,11 +7408,6 @@ begin if QtWidgetSet.IsValidHandle(HWND(FMenuBar)) then begin FMenuBar.DetachEvents; - if FOwnWidget and (FMenuBar.Widget <> nil) then - begin - QObject_deleteLater(FMenuBar.Widget); - FMenuBar.Widget := nil; - end; FMenuBar.Widget := nil; FreeThenNil(FMenuBar); end;