1

所以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 的问题,它们不处理调整大小策略。当然有办法做到这一点?注意我不能使用类似的东西,setFixedSize(ht, wd)因为小部件的大小可以以编程方式更改(添加和删除子小部件)。但是用户不应该能够调整它的大小。

4

2 回答 2

1

即使MyWidget不可调整大小,当您调用时:

ui->mdiArea->addSubWindow(wgt);

小部件放在一个QMdiSubWindow可调整大小地方。您所要做的就是获取创建的窗口并修复其大小:

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

这应该可以,但我自己没有尝试过这段代码。

编辑:嗯......显然这不能解决大小问题。:(

于 2012-01-14T02:18:00.263 回答
0

以下对我有用:

    MyWidget* wgt = new MyWidget(ui->mdiArea); 
    QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt); 
    subWindow->setFixedSize(wgt->size());
    wgt->show();
于 2012-02-11T14:26:50.683 回答