qt中setParent底层实现代码
时间: 2024-02-20 16:57:08 浏览: 32
在Qt中,QWidget类中的setParent方法是用来设置一个QWidget的父控件的,其底层实现代码如下:
```c++
void QWidget::setParent(QWidget *parent)
{
Q_D(QWidget);
if (d->extra && d->extra->topextra && d->extra->topextra->embedded) {
qWarning("QWidget::setParent: Cannot set parent, new parent is in a different window");
return;
}
if (d->parent == parent)
return;
if (parent && parent->windowType() == Qt::Desktop) {
qWarning("QWidget::setParent: Cannot set parent to desktop");
return;
}
if (testAttribute(Qt::WA_WState_Created)) {
if (!parent)
qWarning("QWidget::setParent: Cannot set parent to 0, already has a parent");
else
QWidgetPrivate::setParent_sys(parent);
} else {
d->createTLExtra();
d->extra->topextra->parent = parent;
}
}
```
该方法首先会进行一些参数的判断,如是否传入了父控件,是否已经在一个窗口中等。然后,如果控件已经被创建,调用QWidgetPrivate::setParent_sys方法来设置父控件,否则将父控件存储在QWidgetPrivate::ExtraData中的topextra->parent中。QWidgetPrivate::setParent_sys方法的具体实现可以参考QWidgetPrivate源码。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)