gpt4 book ai didi

c++ - parent 和二传手

转载 作者:行者123 更新时间:2023-11-30 04:07:08 25 4
gpt4 key购买 nike

这是一个一般性的问题,我将用两个例子来说明。

第一个例子:假设我有一个小部件和一个与之关联的布局:

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 函数本身会设置父级吗?如果是,我为什么要费心在验证器的构造函数中指定父级?

希望我的问题很清楚。

最佳答案

WRT 第一个问题:

我认为 QWidget::setLayout() 函数调用和将父控件设置为布局是等效的操作。这非常适合 Qt documentation , 为 QWidget::setLayout() 声明:

An alternative to calling this function is to pass this widget to the layout's constructor.

因此,如果已经为布局设置了父控件,则您确实需要调用 QWidget::setLayout()

WRT 第二题:

当您使用行编辑构建验证器作为父级时,您不会将验证器设置为行编辑 - 这只是定义了 QObjects 层次结构和对象所有权。我认为您不需要在这里混合层次概念和功能概念。

关于c++ - parent 和二传手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com