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
已经是qmdusubwindow
的。但是投票指出addSubWindow
返回qmdusubwindow*
,我没有意识到。:)该死。您能检查一下小部件和子窗口的sizeHint()
方法返回了什么吗?特别是如果返回的QSize
s有效。如果有无效的,它可能会解释为什么修复大小策略不起作用……好吧,我本来不想使用setFixedSize
(参见原始帖子),但我猜这是唯一的方法,每次添加或删除小部件时都重新调用它。好吧,我不想使用setFixedSize
(参见原始帖子)但我想这是唯一的办法,每次添加或删除小部件时都重新命名它。