Russian Qt Forum

Qt => Общие вопросы => Тема начата: mokynis от Июнь 13, 2019, 11:05



Название: закрыть форму из другой формы
Отправлено: mokynis от Июнь 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?


Название: Re: закрыть форму из другой формы
Отправлено: lit-uriy от Июнь 14, 2019, 06:07
вызов метода show() тут совершенно лишний.

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

Код который ты привёл имеет смысл сделать на стеке:
Код
C++ (Qt)
tovname ftnam(this);
if(ftnam.exec()==QDialog::Rejected){}