使用后我要删除QObject指针吗?

时间:2017-01-11 11:14:00

标签: c++ qt

在Qt 5.7.0中使用后,我应该删除QObject指针吗?

例如,我有代码:

std::string login;
std::string password;
if (serviceId == 11) {
    QObject* loginField = this->parent()->findChild<QObject*>("wifiLogintxt1");
    QObject* passwordField = this->parent()->findChild<QObject*>("wifiPasswordtxt1");
    login = loginField->property("text").toString().toStdString();
    password = passwordField->property("text").toString().toStdString();
} else {
    QObject* loginField = this->parent()->findChild<QObject*>("inputField1");
    login = loginField->property("text").toString().toStdString();
}

代码是否会导致内存泄漏,因为我们不会删除QObject指针?

1 个答案:

答案 0 :(得分:3)

不,您不应删除这些对象,它们由其父QObject管理,请参阅QObject trees and ownership

使用findChild时,您将获得指向此父级管理的同一对象的指针。

因此,删除其父窗口小部件时会删除loginFieldpasswordField(在您的情况下为this实例)。如果删除它们,它们将从GUI中消失。您必须保留它们,直到父窗口小部件决定不再需要它们(即它被销毁的时间):

  

您也可以自己删除子对象,并将自己从父母身上删除。例如,当用户删除工具栏时,可能会导致应用程序删除其中一个QToolBar对象,在这种情况下,工具栏的QMainWindow父级会检测到更改并相应地重新配置其屏幕空间。