这是一个普遍的问题,我将用两个例子说明。
第一个例子:假设我有一个小部件和一个与之关联的布局:
QWidget myWidget;
QVBoxLayout* mainLayout = new QVBoxLayout(&myWidget);
请注意,我已将我的窗口小部件指定为布局的父级。问题是,这是否足以将布局与我的小部件相关联,或者我是否必须另外明确地将布局设置为:
myWidget.setLayout(mainLayout);
如果我必须明确设置布局,那么AFAIK设置也会使myWidget成为我的布局的父级,那么在构造函数中指定父级是什么意思?
第二个例子:
假设我有一个行编辑和验证器。
QLineEdit* lineEdit = new QLineEdit(whatever);
QIntValidator* validator = new QIntValidator(0, 100, lineEdit);
请注意,我已为验证程序设置了父级。为了使验证器能够工作",即收听lineEdit的值变化事件,我是否还必须明确设置验证器,如
lineEdit->setValidator(validator);
如果是这样,setValidator函数本身是否会设置父项,如果是这样,我为什么要在Validator的构造函数中指定父项?
希望我的问题很明确。
答案 0 :(得分:2)
写第一个问题:
我认为QWidget::setLayout()
函数调用并将父窗口小部件设置为布局是等效的操作。这非常适合QWidget::setLayout()
的{{3}}:
调用此函数的另一种方法是将此窗口小部件传递给布局的构造函数。
因此,如果已经为布局设置了父窗口小部件,则需要调用QWidget::setLayout()
。
写第二个问题:
当您使用行编辑作为父编译构造验证程序时,您不会将验证程序设置为行编辑 - 这只是定义QObjects层次结构和对象所有权。我认为你不需要在这里混合分层和功能概念。