QWidget :: heightForWidth()和QMainWindow

时间:2013-09-29 09:43:25

标签: c++ qt

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实现不起作用?

1 个答案:

答案 0 :(得分:0)

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

然后,您需要做的就是拥有一个带有布局的占位符窗口小部件,就像您已经做过的那样,然后只将两个窗口小部件放入其中:您希望保留的窗口小部件,加占位符号以获取未使用的空间。

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