How to make a QMdiArea subwindow widget non-resizeable?

3.2k views Asked by At

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.

2

There are 2 answers

1
odonata On BEST ANSWER

The following worked for me:

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

Even though MyWidget is not resizeable, when you call:

ui->mdiArea->addSubWindow(wgt);

The widget is put in a QMdiSubWindow which is resizeable. All you have to do is get the window that's created and fix its size:

QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt);
subWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);

This should work, but I haven't tried this code myself.

EDIT: well... apparently that doesn't fix the size. :(