如何使QMdiArea子窗口小部件不可调整大小?

时间:2012-01-13 21:27:46

标签: c++ qt 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 个答案:

答案 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();