我创建了一个简单的QHBoxLayout
(水平),它被推到QVBoxLayout
(垂直)的底部,它包含两个按钮。见代码:
QWidget* create_ver_and_horizontal_box() {
QWidget* temp = new QWidget();
// Add buttons to the horizontal box
QHBoxLayout* hbox = new QHBoxLayout();
QPushButton *ok = new QPushButton("OK");
QPushButton *cancel = new QPushButton("Cancel");
hbox->addWidget(ok);
hbox->addWidget(cancel);
// Create a vertical box and add the horizontal box to
// the end of it
QVBoxLayout* vbox = new QVBoxLayout();
vbox->addStretch(1);
vbox->addLayout(hbox);
// set the layout and return
temp->setLayout(vbox);
return temp;
}
但是当我将QWidget temp
添加为QHBoxLayout的父级时,就像这样:
// Add buttons to the horizontal box
QHBoxLayout* hbox = new QHBoxLayout(temp);
我想了解这里发生了什么。在这种情况下,我希望QWidget成为布局或任何其他QWidget的父级,在这种情况下,我不会将包含的QWidget作为包含QWidgets的父级。例如,我可以添加temp作为两个Push按钮的父级,但我没有。不添加vs添加是什么意思。
谢谢,
答案 0 :(得分:2)
QHBoxLayout* hbox = new QHBoxLayout(temp);
相当于
QHBoxLayout* hbox = new QHBoxLayout();
temp->setLayout(hbox);
即。你正在使水平布局负责temp
。
对setLayout(vbox)
的调用应该生成一个运行时警告消息,temp
已经有了布局,暗示了这一点。
由于您希望垂直布局负责该窗口小部件,请保留temp->setLayout(vbox)
或将temp
传递给QVBoxLayout
的构造函数。