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

C++ 如何使QMdiArea子窗口小部件不可调整大小?,c++,qt,qmdiarea,C++,Qt,Qmdiarea,因此,我的代码的非QMdiArea版本 MyWidget::MyWidget(QWidget* parent) { ... layout()->setSizeConstraint( QLayout::SetFixedSize ); } MainWindow::MainWindow(...) { ... MyWidget* wgt = new MyWidget(NULL); wgt->show(); } 工作正常,生成用户无法调整大小的小部件。但是当m

因此,我的代码的非
QMdiArea
版本

MyWidget::MyWidget(QWidget* parent)
{
   ...
   layout()->setSizeConstraint( QLayout::SetFixedSize );
}

MainWindow::MainWindow(...)
{
   ...
   MyWidget* wgt = new MyWidget(NULL);
   wgt->show();
}
工作正常,生成用户无法调整大小的小部件。但是当
main窗口
代码被替换为

MainWindow::MainWindow(...)
{
   ...
   MyWidget* wgt = new MyWidget(ui->mdiArea); //Or MyWidget(NULL), same result
   ui->mdiArea->addSubWindow(wgt);
}

现在位于
QMdiArea
内的窗口可调整大小。这似乎不是Qt::WindowFlags的问题,它们不处理调整大小策略。肯定有办法做到这一点吗?注意:我不能使用类似于
setFixedSize(ht,wd)
的东西,因为小部件的大小可以通过编程方式更改(添加和删除子部件)。但是用户应该不能调整它的大小。

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

ui->mdiArea->addSubWindow(wgt);
小部件放在一个可调整大小的容器中。您只需获取已创建的窗口并确定其大小:

QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt);
subWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
这应该行得通,但我自己还没有尝试过这段代码


编辑:嗯。。。显然,这并不能确定尺寸(

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

ui->mdiArea->addSubWindow(wgt);
小部件放在一个可调整大小的窗口中。您所要做的就是获取已创建的窗口并确定其大小:

QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt);
subWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
这应该行得通,但我自己还没有尝试过这段代码


编辑:嗯……显然这并不能确定尺寸。(

以下内容对我很有用:

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

以下几点对我很有用:

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

没有,没有改变任何东西。看起来确实是一次很好的尝试,但是再次,由于
setSizePolicy
已经是
QWidget
的一种方法,并且不是
qmdusbwindow
特有的。但是,我没有意识到,
addSubWindow
返回
qmdusbwindow*
,我没有意识到:)该死。你能查一下
sizeHint()是什么吗
方法为您的小部件和子窗口返回?特别是如果返回的
QSize
s有效。如果任何值无效,它可能会解释为什么修复大小策略不起作用…不,没有改变任何东西。显然看起来是一次很好的尝试,但再次尝试,因为
setSizePolicy
已经是的一种方法e> QWidget并不是专门针对
qmdusubwindow
的。但是投票指出
addSubWindow
返回
qmdusubwindow*
,我没有意识到。:)该死。您能检查一下小部件和子窗口的
sizeHint()
方法返回了什么吗?特别是如果返回的
QSize
s有效。如果有无效的,它可能会解释为什么修复大小策略不起作用……好吧,我本来不想使用
setFixedSize
(参见原始帖子),但我猜这是唯一的方法,每次添加或删除小部件时都重新调用它。好吧,我不想使用
setFixedSize
(参见原始帖子)但我想这是唯一的办法,每次添加或删除小部件时都重新命名它。