Как сделать виджет подокна QMdiArea неизменяемым? - PullRequest
1 голос
/ 14 января 2012

То есть не-1001 * версия моего кода,

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, они не обрабатывают политику изменения размера. Наверняка есть способ сделать это? Примечание: я не могу использовать что-то вроде setFixedSize(ht, wd), поскольку размер виджета может изменяться программно (подвиджеты добавляются и удаляются) Но пользователь не должен иметь возможность изменить его размер.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Несмотря на то, что MyWidget не может быть изменен в размере, когда вы вызываете:

ui->mdiArea->addSubWindow(wgt);

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

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

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

РЕДАКТИРОВАТЬ: хорошо ..Очевидно, что не не устанавливает размер.(

0 голосов
/ 11 февраля 2012

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

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