diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index b82731c826..475ca2fb46 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -5652,7 +5652,19 @@ end; function TQtTabWidget.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; +var + w: QWidgetH; + ResizeEvent: QResizeEventH; + i: Integer; + NewSize: TSize; + OldSize: TSize; begin + + Result := False; + QEvent_accept(Event); + if LCLObject = nil then + exit; + BeginEventProcessing; if (Sender = TabBar) then begin @@ -5671,6 +5683,28 @@ begin end; end else begin + {qt doesn't call resize for inactive pages, so LCL don't know + about changes on inactive pages, we must send resizeEvent to + all pages except for active one.This is fix for #13018} + if QEvent_type(Event) = QEventResize then + begin + w := QTabWidget_currentWidget(QTabWidgetH(Widget)); + if w <> nil then + begin + QWidget_size(w, @NewSize); + OldSize.Cx := 0; + OldSize.Cy := 0; + for i := 0 to QTabWidget_count(QTabWidgetH(Widget)) - 1 do + begin + w := QTabWidget_widget(QTabWidgetH(Widget), i); + if w <> QTabWidget_currentWidget(QTabWidgetH(Widget)) then + begin + ResizeEvent := QResizeEvent_create(@NewSize, @OldSize); + QCoreApplication_postEvent(w, ResizeEvent, 1); + end; + end; + end; + end; Result := inherited EventFilter(Sender, Event); end;