所以我的代码的非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)
这样的东西,因为小部件的大小可以通过编程方式改变(添加和删除子小部件)。但是用户不应该调整它的大小。
答案 0 :(得分:1)
即使MyWidget
无法调整大小,当您致电:
ui->mdiArea->addSubWindow(wgt);
小部件放在QMdiSubWindow
中,其中 可以调整大小。您所要做的就是获取创建的窗口并修复其大小:
QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt);
subWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
这应该可行,但我自己没有尝试过这段代码。
编辑:嗯......显然没有修复大小。 :(
答案 1 :(得分:0)
以下对我有用:
MyWidget* wgt = new MyWidget(ui->mdiArea);
QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt);
subWindow->setFixedSize(wgt->size());
wgt->show();