Название: проблема при закрытии формы Отправлено: slava_d200 от Июня 17, 2012, 03:12 Прошу подсказки.
есть MDI приложение. создаю форму на основании QWidgate. при открытии формы добавляю ее в QMdiArea на этой форме есть кнопка которая посылает сигнал CLOSE() так вот при нажатии на эту кнопку сама кнопка пропадает, а форма не закрывается. а если нажать "Х" то все нормально закрывается. полагаю что проблема в добавлении формы в QMdiArea (если не добавлять то все хорошо). ВОПРОС: чем отличается нажатие кнопки "Х" и команды CLOSE() разве "Х" не генерит туже самую команду. Название: Re: проблема при закрытии формы Отправлено: Kurles от Июня 17, 2012, 05:36 ну наверное потому, что ты "закрываешь" виждет, а не QMdiSubWindow. Попробуй делать так:
Код
Название: Re: проблема при закрытии формы Отправлено: slava_d200 от Июня 17, 2012, 10:01 Код
Действительно. такой код сработал. спасибо. но вопрос остался прежним. почему при нажатии на "Х" все отрабатывает корректно, а программно НЕТ. Название: Re: проблема при закрытии формы Отправлено: LisandreL от Июня 17, 2012, 10:12 Вам уже ответили - скорее всего потому, что вы вызывали close не у окна, а у самой кнопки. При этом она собственно и исчезала.
Ну это в рамках телепатии и прорицания. Точнее только если вы выложите тот глючащий код. Название: Re: проблема при закрытии формы Отправлено: slava_d200 от Июня 17, 2012, 10:35 Вам уже ответили - скорее всего потому, что вы вызывали close не у окна, а у самой кнопки. При этом она собственно и исчезала. Ну это в рамках телепатии и прорицания. Точнее только если вы выложите тот глючащий код. :) я же уже писал что если не добавлять форму в QMdiArea что все корректно отрабатывает. откуда уже можно сделать вывод что сигналы настроены верно. если бы сигнал был не верный. то он бы и в этом случае тоже сработал бы так же. а во вторых если на форму накидать еще всяких кнопок виджетов и т.д. то они пропадают так же как пропадает нажимаемая кнопка. вот код самой формы CRm::CRm(QWidget *parent) : QWidget(parent) { setupUi(this); //connect(this->pushButton,SIGNAL(clicked()),this,SLOT(_close())); connect(this->pushButton,SIGNAL(clicked()),this,SLOT(close())); } void CRm::_close() { //QCloseEvent *i = new QCloseEvent(); //QWidget::closeEvent(i); //this->close(); } а так я создаю: CRm * Spr = new CRm(this); Spr->setObjectName(sender()->objectName()); Spr->setAttribute(Qt::WA_DeleteOnClose); Spr->setWindowTitle(QObject::tr("Справочник: ""Рабочие места""")); QMdiSubWindow *sw = new QMdiSubWindow(); sw->setAttribute(Qt::WA_DeleteOnClose); sw->setWidget(Spr); m_pws->addSubWindow(sw); //connect(Spr->pushButton,SIGNAL(clicked()),sw,SLOT(close())); Spr->show(); Название: Re: проблема при закрытии формы Отправлено: Kurles от Июня 17, 2012, 15:14 Код
Действительно. такой код сработал. спасибо. но вопрос остался прежним. почему при нажатии на "Х" все отрабатывает корректно, а программно НЕТ. Код это разве не программно? А вызвав слот close у своего виджета ты "закрыл" свой виджет, на котором была кнопка, а не контейнер QMdiSubWindow, в котором храниться твой виджет. Можно еще попробовать у QMdiSubWindow сделать родителем твой виджет Код и тогда при уничтожении виджета уничтожится и контейнер. Сумбурно, конечно, но как мог. Название: Re: проблема при закрытии формы Отправлено: slava_d200 от Июня 17, 2012, 23:39 Да это все понятно. спасибо.
Я хочу теперь узнать тока одно. что за сигнал подается когда нажимается "Х" на форме. что он еще и гасит QMdiSubWindow Название: Re: проблема при закрытии формы Отправлено: Kurles от Июня 18, 2012, 06:49 Блин. Сингнал никакой не подается, вызывается слот void QMdiSubWindow::close().
|