Make wxTopLevelWindow::SetSizeHints() work in wxQt
Override Set{Min,Max}Size and DoSetSizeHints() to pass size information
to Qt: setting min/max widget size at the wxWidgets level is not enough
to take effect unless the information is also set at the Qt level.
Closes #23917.
This commit is contained in:
parent
7e9d06f584
commit
3c6869605e
4 changed files with 65 additions and 0 deletions
|
|
@ -45,6 +45,13 @@ public:
|
|||
// Styles
|
||||
virtual void SetWindowStyleFlag( long style ) override;
|
||||
virtual long GetWindowStyleFlag() const override;
|
||||
|
||||
protected:
|
||||
void QtSetSizeIncrement(int width, int height);
|
||||
|
||||
virtual void DoSetSizeHints( int minW, int minH,
|
||||
int maxW, int maxH,
|
||||
int incW, int incH) override;
|
||||
};
|
||||
|
||||
#endif // _WX_QT_TOPLEVEL_H_
|
||||
|
|
|
|||
|
|
@ -136,6 +136,10 @@ public:
|
|||
virtual bool SetBackgroundColour(const wxColour& colour) override;
|
||||
virtual bool SetForegroundColour(const wxColour& colour) override;
|
||||
|
||||
// Min/max sizes
|
||||
virtual void SetMinSize(const wxSize& minSize) override;
|
||||
virtual void SetMaxSize(const wxSize& maxSize) override;
|
||||
|
||||
QWidget *GetHandle() const override;
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
|
|
@ -225,6 +229,11 @@ protected:
|
|||
// itself.
|
||||
virtual QWidget* QtGetParentWidget() const { return GetHandle(); }
|
||||
|
||||
// Set{Min,Max}Size() and DoSetSizeHints() overrides call these functions
|
||||
// to transfer min/max size information to Qt.
|
||||
void QtSetMinSize(const wxSize& minSize);
|
||||
void QtSetMaxSize(const wxSize& maxSize);
|
||||
|
||||
QWidget *m_qtWindow;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -245,3 +245,22 @@ long wxTopLevelWindowQt::GetWindowStyleFlag() const
|
|||
|
||||
return winStyle;
|
||||
}
|
||||
|
||||
void wxTopLevelWindowQt::QtSetSizeIncrement(int width, int height)
|
||||
{
|
||||
const int w = wxMax(0, width);
|
||||
const int h = wxMax(0, height);
|
||||
|
||||
GetHandle()->setSizeIncrement(w, h);
|
||||
}
|
||||
|
||||
void wxTopLevelWindowQt::DoSetSizeHints( int minW, int minH,
|
||||
int maxW, int maxH,
|
||||
int incW, int incH)
|
||||
{
|
||||
QtSetMinSize(wxSize(minW, minH));
|
||||
QtSetMaxSize(wxSize(maxW, maxH));
|
||||
QtSetSizeIncrement(incW, incH);
|
||||
|
||||
wxTopLevelWindowBase::DoSetSizeHints(minW, minH, maxW, maxH, incW, incH);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -486,6 +486,36 @@ void wxWindowQt::SetFocus()
|
|||
GetHandle()->setFocus();
|
||||
}
|
||||
|
||||
void wxWindowQt::QtSetMinSize(const wxSize& minSize)
|
||||
{
|
||||
if ( minSize.x >= 0 )
|
||||
GetHandle()->setMinimumWidth(minSize.x);
|
||||
|
||||
if ( minSize.y >= 0 )
|
||||
GetHandle()->setMinimumHeight(minSize.y);
|
||||
}
|
||||
|
||||
void wxWindowQt::QtSetMaxSize(const wxSize& maxSize)
|
||||
{
|
||||
if ( maxSize.x >= 0 )
|
||||
GetHandle()->setMaximumWidth(maxSize.x);
|
||||
|
||||
if ( maxSize.y >= 0 )
|
||||
GetHandle()->setMaximumHeight(maxSize.y);
|
||||
}
|
||||
|
||||
void wxWindowQt::SetMinSize(const wxSize& minSize)
|
||||
{
|
||||
QtSetMinSize(minSize);
|
||||
wxWindowBase::SetMinSize(minSize);
|
||||
}
|
||||
|
||||
void wxWindowQt::SetMaxSize(const wxSize& maxSize)
|
||||
{
|
||||
QtSetMaxSize(maxSize);
|
||||
wxWindowBase::SetMaxSize(maxSize);
|
||||
}
|
||||
|
||||
/* static */ void wxWindowQt::QtReparent( QWidget *child, QWidget *parent )
|
||||
{
|
||||
// Backup the attributes which will be changed during the reparenting:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue