Как сделать виджет подокна 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);
Это должно работать, но я сам не пробовал этот код.
РЕДАКТИРОВАТЬ: ну... видимо, это не исправить размер.:(