Russian Qt Forum
Ноябрь 23, 2024, 08:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: закрыть форму из другой формы  (Прочитано 2955 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Июнь 13, 2019, 11:05 »

Имеется приложение MDI. Из одной формы (store, она создается, как SubWindow) открывается еще одна форма:
Код:
tovname *ftnam=new tovname();
        ftnam->show();
        if(ftnam->exec()==QDialog::Rejected){}
        delete ftnam;
при этом ftnam открывается не в MainWindow. Когда приложение закрывается, на экране остается висеть ftnam.
Можно ли при закрытии приложения (а еще лучше, при закрытии store), закрывать эту ftnam? Пробовал открывать ее так:
Код:
tovname *ftnam=new tovname(this);
        ftnam->setAttribute(Qt::WA_DeleteOnClose);
        ftnam->show();
        if(ftnam->exec()==QDialog::Rejected){}
        delete ftnam;
Если ftnam закрывается пользователем, то все в порядке, но при попытке закрыть store получается segmentation fault (причем при удалении store).
Как сделать, чтобы ftnam можно было бы закрыть и вручную, и вместе со store?
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июнь 14, 2019, 06:07 »

вызов метода show() тут совершенно лишний.

Если передаёшь в дочерний виджет указатель на родителя, то родитель удалит объект, вызывать delete не нужно, но если приспичило явно прибить дочерний виджет пользуйся методом deleteLater().

Код который ты привёл имеет смысл сделать на стеке:
Код
C++ (Qt)
tovname ftnam(this);
if(ftnam.exec()==QDialog::Rejected){}
 
« Последнее редактирование: Июнь 14, 2019, 06:08 от lit-uriy » Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.098 секунд. Запросов: 23.