Make Reparent() work for wxFrame in wxQt
Use the correct parent window, i.e. the one of the central widget and not of the frame itself.
This commit is contained in:
parent
616fc76173
commit
b8d5c85ecb
@ -57,6 +57,8 @@ public:
|
||||
protected:
|
||||
virtual void DoGetClientSize(int *width, int *height) const wxOVERRIDE;
|
||||
|
||||
virtual QWidget* QtGetParentWidget() const wxOVERRIDE;
|
||||
|
||||
private:
|
||||
// Common part of all ctors.
|
||||
void Init()
|
||||
|
@ -215,6 +215,12 @@ protected:
|
||||
virtual bool DoPopupMenu(wxMenu *menu, int x, int y) wxOVERRIDE;
|
||||
#endif // wxUSE_MENUS
|
||||
|
||||
// Return the parent to use for children being reparented to us: this is
|
||||
// overridden in wxFrame to use its central widget rather than the frame
|
||||
// itself.
|
||||
virtual QWidget* QtGetParentWidget() const { return GetHandle(); }
|
||||
|
||||
|
||||
QWidget *m_qtWindow;
|
||||
|
||||
private:
|
||||
|
@ -187,11 +187,16 @@ void wxFrame::SetWindowStyleFlag( long style )
|
||||
GetQMainWindow()->setWindowFlags(qtFlags);
|
||||
}
|
||||
|
||||
QWidget* wxFrame::QtGetParentWidget() const
|
||||
{
|
||||
return GetQMainWindow()->centralWidget();
|
||||
}
|
||||
|
||||
void wxFrame::AddChild( wxWindowBase *child )
|
||||
{
|
||||
// Make sure all children are children of the central widget:
|
||||
|
||||
QtReparent( child->GetHandle(), GetQMainWindow()->centralWidget() );
|
||||
QtReparent( child->GetHandle(), QtGetParentWidget() );
|
||||
|
||||
wxFrameBase::AddChild( child );
|
||||
}
|
||||
|
@ -437,7 +437,7 @@ bool wxWindowQt::Reparent( wxWindowBase *parent )
|
||||
if ( !wxWindowBase::Reparent( parent ))
|
||||
return false;
|
||||
|
||||
QtReparent( GetHandle(), parent->GetHandle() );
|
||||
QtReparent( GetHandle(), static_cast<wxWindow*>(parent)->QtGetParentWidget() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user