Search code examples
c++qtqmdiarea

How to make a QMdiArea subwindow widget non-resizeable?


So the non-QMdiArea version of my code,

MyWidget::MyWidget(QWidget* parent)
{
   ...
   layout()->setSizeConstraint( QLayout::SetFixedSize );
}

MainWindow::MainWindow(...)
{
   ...
   MyWidget* wgt = new MyWidget(NULL);
   wgt->show();
}

works just fine and produces a widget that the user can't resize. But when the MainWindow code is replaced with

MainWindow::MainWindow(...)
{
   ...
   MyWidget* wgt = new MyWidget(ui->mdiArea); //Or MyWidget(NULL), same result
   ui->mdiArea->addSubWindow(wgt);
}

the window, now within the QMdiArea, is resizeable. It doesn't seem to be an issue of Qt::WindowFlags, they don't handle resize policy. Surely there is a way to do this? NB I cant use something like setFixedSize(ht, wd) since the size of the widget can change programmatically (subwidgets are added and removed). But the user should not be able to resize it.


Solution

  • The following worked for me:

        MyWidget* wgt = new MyWidget(ui->mdiArea); 
        QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt); 
        subWindow->setFixedSize(wgt->size());
        wgt->show();