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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Закрытие подчиненного окна  (Прочитано 3695 раз)
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 просто исчезают все компоненты, а само окно не закрывается, а остается пустым! Как можно не через нажатие на крестик в правом верхнем углу, а через код его закрыть?
Записан
BaltikS
Гость
« Ответ #1 : Январь 15, 2010, 09:53 »

А так? ui->area->closeActiveSubWindow () ;
Записан
kadr
Гость
« Ответ #2 : Январь 15, 2010, 14:56 »

А так? ui->area->closeActiveSubWindow () ;
нет так не пойдет, кнопка закрытия находиться на том окне,которое надо закрыть, то есть кнопка находиться в классе lgot_rech, а присвоение окна к QMidArea происходит в классе nozologia. Разные классы!
Записан
SABROG
Гость
« Ответ #3 : Январь 15, 2010, 15:10 »

А такой вариант?

Код
C++ (Qt)
deleteLater();
 
Записан
MoPDoBoPoT
Гость
« Ответ #4 : Январь 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();
    }   

Думаю идея ясна.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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