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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: MdiArea и дочерние окна  (Прочитано 4507 раз)
Magvaj
Гость
« : Март 27, 2009, 00:17 »

Создаю дочерние окна, наследованные от QDialog. Добавляю их в MDI при помощи addSubWindow().

Флаг WA_DeleteOnClose не установлен, однако при попытке закрытия окна указатель на него пропадает таинственным образом и при попытке обращения к нему прога вылетает.

Как можно избежать удаление указателя дочернего окна?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Март 27, 2009, 09:47 »

Покажи код как создаешь окно и добавляешь в MDI
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Magvaj
Гость
« Ответ #2 : Март 29, 2009, 15:01 »

к примеру, при создании главной формы делаю:

Код:
frmChannel=NULL;

Затем при вызове слота меню:

Код:
void MainForm::on_aChannelList_triggered()
{
    if(!frmChannel)
    {
        frmChannel=new ChannelForm(this, dbo);
        this->ui->mdiArea->addSubWindow(frmChannel);
    }
    frmChannel->RefreshData();
    frmChannel->show();
}

После этого если снова вызывать этот слот, то он выводит окно поверх корректно до тех пор, пока не закроешь окно... после закрытия указатель окна таинственным образом становится негодным...

Пробовал добавлять после создания frmChannel:

Код:
frmChannel->setAttribute(Qt::WA_DeleteOnClose, false);

результат один.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Март 30, 2009, 10:08 »

сделай так:

Код
C++ (Qt)
void MainForm::on_aChannelList_triggered()
{
   if(!frmChannel)
   {
       frmChannel=new ChannelForm(this, dbo);
       QMdiSubWindow *child = new QMdiSubWindow(this);
       child->setWidget(frmChannel);
       this->ui->mdiArea->addSubWindow(frmChannel);
   }
   frmChannel->RefreshData();
   frmChannel->show();
}

Для интереса заглянь в исходники Qt  - QMdiArea::addSubWindow
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Magvaj
Гость
« Ответ #4 : Март 31, 2009, 12:46 »

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


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