Iva*_*lov 6 c++ qt delete-operator
会发生什么,如果我们运行delete widget的widget是布局?如果这个案例是写在文档中的,请给我链接(我没有找到)。
代码示例:
QLabel *l1 = new QLabel("1st");
QLabel *l2 = new QLabel("2nd");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(l1);
layout->addWidget(l2);
QWidget *mainWidget = new QWidget;
mainWidget->setLayout(layout);
mainWidget->show();
delete l1;
l2->deleteLater();
Run Code Online (Sandbox Code Playgroud)
l1和会发生的事情会有所不同l2吗?
我相信你所做的几乎是相同的,尽管两者都不会按照你应该做的方式正确地从布局中删除。它们仍然被留在布局中作为错误的参考(如果我没记错的话)
第一个现在只是删除该项目。一旦控件返回事件循环,第二个将删除它。但实际上,人们通常从布局中删除项目的方式是将它们从布局中取出(给它一个自我调整的机会),然后删除该项目及其小部件(如果您愿意)。
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
delete child->widget();
delete child;
}
Run Code Online (Sandbox Code Playgroud)
child->widget()同样,只有当您想要销毁已添加的小部件以及包含该小部件的布局项时,才需要删除该小部件 ( )。
| 归档时间: |
|
| 查看次数: |
7153 次 |
| 最近记录: |