Как сделать виджет подокна QMdiArea неизменяемым?

Так что неQMdiArea версия моего кода,

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

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

работает просто отлично и создает виджет, который пользователь не может изменить. Но когда MainWindow код заменяется на

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

окно, теперь в пределах QMdiArea, можно изменить размер. Кажется, это не проблема Qt::WindowFlags, они не обрабатывают политику изменения размера. Наверняка есть способ сделать это? NB я не могу использовать что-то вроде setFixedSize(ht, wd) поскольку размер виджета может изменяться программно (подвиджеты добавляются и удаляются). Но пользователь не должен иметь возможность изменить его размер.

2 ответа

Решение

Следующее работало для меня:

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

Даже если MyWidget не изменяется, когда вы звоните:

ui->mdiArea->addSubWindow(wgt);

Виджет помещен в QMdiSubWindow который можно изменить. Все, что вам нужно сделать, это получить созданное окно и исправить его размер:

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

Это должно работать, но я сам не пробовал этот код.

РЕДАКТИРОВАТЬ: ну... видимо, это не исправить размер.:(

Другие вопросы по тегам