@SGaist
developing OS: Windows10
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
if(parent)
{
parent->installEventFilter(this);
}
}
bool Dialog::event(QEvent *event)
{
if(!parent())
{
return QWidget::event(event);
}
switch(event->type())
{
case QEvent::ParentChange:
{
parent()->installEventFilter(this);
setGeometry(overlayGeometry());
break;
}
case QEvent::ParentAboutToChange:
{
parent()->removeEventFilter(this);
break;
}
default:
break;
}
return QWidget::event(event);
}
bool Dialog::eventFilter(QObject *obj, QEvent *event)
{
switch(event->type())
{
case QEvent::Move:
case QEvent::Resize:
setGeometry(overlayGeometry());
break;
default:
break;
}
return QWidget::eventFilter(obj, event);
}
QRect Dialog::overlayGeometry() const
{
QWidget *widget = parentWidget();
if(!widget)
{
return QRect();
}
return widget->rect();
}
And
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_form = new Dialog;
m_form->hide();
m_form->setParent(ui->widget_2);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
m_form->show();
}
void MainWindow::on_pushButton_2_clicked()
{
m_form->hide();
}
As shown in the figure, "widget_1" is on the left and "widget_2" is on the right, "dialog.ui" is all filled with pink
[image: cb18ac88-a221-44c3-b2d8-2b18adf9d851.png]