在previous question中,我获得了代码,其中显示了heightForWidth()
(感谢@Kuba Ober)的实现,但是它只适用于顶级QWidget
。我尝试为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
实现不起作用?
答案 0 :(得分:0)
首先请注意,QMainWindow
需要将某些内容设置为中央窗口小部件,即使它是占位符。
然后,您需要做的就是拥有一个带有布局的占位符窗口小部件,就像您已经做过的那样,然后只将两个窗口小部件放入其中:您希望保留的窗口小部件,加占位符号以获取未使用的空间。
或者,为什么你坚持小部件是正方形?只需在内部绘制方形部分,然后使用默认背景角色清除其余部分。