1

上一个问题中,我得到了代码,该代码显示了heightForWidth()(感谢@Kuba Ober)的实现,但它仅适用于顶级QWidget. 我试图为 a 复制它QMainWindow,但它没有用。

这是heightForWidth()适用于顶级的代码QWidget

QWidget w;
QVBoxLayout * l = new QVBoxLayout(&w);
l->addWidget(new Widget);
w.show();

这就是我尝试为 QMainWindow 实现相同的地方,但在这里它heightForWidth()没有效果(即使它被调用):

QMainWindow mainWnd;
QWidget *w = new QWidget;
QVBoxLayout * l = new QVBoxLayout(w);
l->addWidget(new Widget);
mainWnd.setCentralWidget(w);
// Second widget to take unused space.
QFrame * btm = new QFrame;
btm->setFrameShape(QFrame::Panel);
btm->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
l->addWidget(btm);
mainWnd.show();

那么为什么QMainWindow实施不起作用呢?

4

1 回答 1

0

首先请注意, aQMainWindow需要将某些内容设置为中央小部件,即使它是占位符。

那么,您需要做的就是拥有一个带有布局的占位符小部件,就像您已经做的那样,然后才将两个小部件放入其中:您想要保持方形的一个,加上一个占位符来拾取未使用的空间。

或者,你为什么坚持小部件是方形的?只需在里面绘制方形部分,然后使用默认背景角色清除其余部分。

于 2013-09-29T13:02:49.450 回答