Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kadr от Январь 15, 2010, 09:20



Название: Закрытие подчиненного окна
Отправлено: kadr от Январь 15, 2010, 09:20
Привет всем, не могу закрыть окно, имеется программа на основе MDI окон, основное окно программы - это QMidArea, в ней соответственно открываются окна:
Код:
lgot_rech *lgota = new lgot_rech;
    lgota->setAttribute(Qt::WA_DeleteOnClose);
    ui->area->addSubWindow(lgota)->setFixedSize(708,383);
    lgota->show();
так вот пытаюсь из отрытого окна lgota, закрыть это же окно, например close(), и получается, что с окна lgota просто исчезают все компоненты, а само окно не закрывается, а остается пустым! Как можно не через нажатие на крестик в правом верхнем углу, а через код его закрыть?


Название: Re: Закрытие подчиненного окна
Отправлено: BaltikS от Январь 15, 2010, 09:53
А так? ui->area->closeActiveSubWindow () ;


Название: Re: Закрытие подчиненного окна
Отправлено: kadr от Январь 15, 2010, 14:56
А так? ui->area->closeActiveSubWindow () ;
нет так не пойдет, кнопка закрытия находиться на том окне,которое надо закрыть, то есть кнопка находиться в классе lgot_rech, а присвоение окна к QMidArea происходит в классе nozologia. Разные классы!


Название: Re: Закрытие подчиненного окна
Отправлено: SABROG от Январь 15, 2010, 15:10
А такой вариант?

Код
C++ (Qt)
deleteLater();
 


Название: Re: Закрытие подчиненного окна
Отправлено: MoPDoBoPoT от Январь 15, 2010, 15:37
Привет всем, не могу закрыть окно, имеется программа на основе MDI окон, основное окно программы - это QMidArea, в ней соответственно открываются окна:
Код:
lgot_rech *lgota = new lgot_rech;
    lgota->setAttribute(Qt::WA_DeleteOnClose);
    ui->area->addSubWindow(lgota)->setFixedSize(708,383);
    lgota->show();
так вот пытаюсь из отрытого окна lgota, закрыть это же окно, например close(), и получается, что с окна lgota просто исчезают все компоненты, а само окно не закрывается, а остается пустым! Как можно не через нажатие на крестик в правом верхнем углу, а через код его закрыть?
Такое поведение скорей всего потому что lgot_rech не наследник QMdiSubWindow.
Для начала надо примерно так:
Код:
    QMdiSubWindow *subWindow = ui->area->addSubWindow(new lgot_rech);
    subWindow->setAttribute(Qt::WA_DeleteOnClose);
    subWindow->setFixedSize(708,383)
    subWindow->show();
А закрыть подокно из метода класса lgot_rech можно попробовать так:
Код:
    this->window()->close();
Если не получится (в случае QMdiSubWindow::isWindow()==false, не проверял), то можно попробовать через приведение типов:
Код:
    QWidget *parent = this->parentWidget();
    while (parent) {
        QMdiSubWindow *subWindow = qobject_cast<QMdiSubWindow *>(parent);
        if (subWindow) {
            subWindow->close();
            break;
        }
        parent = parent->parentWidget();
    }   

Думаю идея ясна.