Как установить объект в nullptr после самостоятельного удаления - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть диалоговое окно с классом QDialog. Я объявляю это в заголовочных файлах с:

MyDialogClass myDialogWindow = nullptr;

и создайте окно во время выполнения где-нибудь с

myDialogWindow = new MyDialogClass(this);

Это также уничтожает delf из-за его атрибутов:

this->setAttribute(Qt::WA_DeleteOnClose);

Кто-нибудь теперь, как я могу установить указатель myDialogWindow в nullptr после самостоятельного удаления без сигналов подключения?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Это невозможно без некоторой логики сигнала или события. У объекта нет указателя, указатель указывает на объект.

Однако вы можете использовать QPointer, который оборачивает для вас обработку сигналов и обнуление.

QPointer<MyDialogClass> myDialogWindow;
myDialogWindow = new MyDialogClass(this);
myDialogWindow->setAttribute(Qt::WA_DeleteOnClose);

// some time later, check dialog has not been closed
if( ! myDialogWindow.isNull() )
{
    // do something with dialog
}
0 голосов
/ 02 ноября 2018

Вы можете поймать, когда объект уничтожен, и стереть указатель.

connect(myDialogWindow, &QObject::destroyed, [&myDialogWindow](){ myDialogWindow = nullptr;});
0 голосов
/ 02 ноября 2018

Вы не можете сделать это вообще. Любой T не может знать, используется ли он как T или T& или T*, и вы не можете автоматически изменить все соответствующие T* на nullptr изнутри T (потому что это не ' не знаю о них).

Вам нужен другой способ сообщить, что ваш экземпляр MyDialogClass уничтожен - например, сигнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...