Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: slava_d200 от Июня 17, 2012, 03:12



Название: проблема при закрытии формы
Отправлено: slava_d200 от Июня 17, 2012, 03:12
Прошу подсказки.
есть MDI приложение.
создаю форму на основании QWidgate.
при открытии формы добавляю ее в QMdiArea
на этой форме есть кнопка которая посылает сигнал CLOSE()
так вот при нажатии на эту кнопку сама кнопка пропадает, а форма не закрывается.
а если нажать "Х" то все нормально закрывается.
полагаю что проблема в добавлении формы в QMdiArea (если не добавлять то все хорошо).

ВОПРОС: чем отличается нажатие кнопки "Х" и команды  CLOSE()
разве "Х" не генерит туже самую команду.



Название: Re: проблема при закрытии формы
Отправлено: Kurles от Июня 17, 2012, 05:36
ну наверное потому, что ты "закрываешь" виждет, а не QMdiSubWindow. Попробуй делать так:

Код
C++ (Qt)
QMdiSubWindow *sw = mdiArea->addSubWindow(widget);
connect(widget, SIGNAL(closeButtonPushed()), sw, SLOT(close()));


Название: Re: проблема при закрытии формы
Отправлено: slava_d200 от Июня 17, 2012, 10:01

Код
C++ (Qt)
QMdiSubWindow *sw = mdiArea->addSubWindow(widget);
connect(widget, SIGNAL(closeButtonPushed()), sw, SLOT(close()));

Действительно. такой код сработал. спасибо.

но вопрос остался прежним.
почему при нажатии на "Х" все отрабатывает корректно, а программно НЕТ.


Название: 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

Код
C++ (Qt)
QMdiSubWindow *sw = mdiArea->addSubWindow(widget);
connect(widget, SIGNAL(closeButtonPushed()), sw, SLOT(close()));

Действительно. такой код сработал. спасибо.

но вопрос остался прежним.
почему при нажатии на "Х" все отрабатывает корректно, а программно НЕТ.
Код
C++ (Qt)
QMdiSubWindow *sw = mdiArea->addSubWindow(widget);
connect(widget, SIGNAL(closeButtonPushed()), sw, SLOT(close()));
это разве не программно? А вызвав слот close у своего виджета ты "закрыл" свой виджет, на котором была кнопка, а не контейнер QMdiSubWindow, в котором храниться твой виджет. Можно еще попробовать у QMdiSubWindow сделать родителем твой виджет
Код
C++ (Qt)
   QMdiSubWindow *sw = mdiArea->addSubWindow(widget);
   sw->setParent(widget);
и тогда при уничтожении виджета уничтожится и контейнер. Сумбурно, конечно, но как мог.


Название: Re: проблема при закрытии формы
Отправлено: slava_d200 от Июня 17, 2012, 23:39
Да это все понятно. спасибо.

Я хочу теперь узнать тока одно.

что за сигнал подается когда нажимается "Х" на форме.
что он еще и гасит QMdiSubWindow


Название: Re: проблема при закрытии формы
Отправлено: Kurles от Июня 18, 2012, 06:49
Блин. Сингнал никакой не подается, вызывается слот void QMdiSubWindow::close().