Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Magvaj от Март 27, 2009, 00:17



Название: MdiArea и дочерние окна
Отправлено: Magvaj от Март 27, 2009, 00:17
Создаю дочерние окна, наследованные от QDialog. Добавляю их в MDI при помощи addSubWindow().

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

Как можно избежать удаление указателя дочернего окна?


Название: Re: MdiArea и дочерние окна
Отправлено: pastor от Март 27, 2009, 09:47
Покажи код как создаешь окно и добавляешь в MDI


Название: Re: MdiArea и дочерние окна
Отправлено: Magvaj от Март 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);

результат один.


Название: Re: MdiArea и дочерние окна
Отправлено: pastor от Март 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


Название: Re: MdiArea и дочерние окна
Отправлено: Magvaj от Март 31, 2009, 12:46
поковыряю... пока вернулся на QWorkSpace ввиду срочной сдачи программы.