crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> [Не решено]MdiArea, закрытие потомков
breeve
  опции профиля:
сообщение 13.5.2010, 13:49
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

Спасибо сказали: 9 раз(а)




Репутация:   1  


Если в Mdi приложении открыто одно окно и я его закрываю падает вся программа.
Есть функция, смена фокуса. При смене фокуса в PropertyWindow меняются параметры на параметры того окна которое сейчас активно. Если я пишу:
Раскрывающийся текст
connect(mainArea,SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(changeFocus(QMdiSubWindow*)));
...
void TestCreator::changeFocus(QMdiSubWindow *wid)
{
    Test *w = qobject_cast<Test *>(wid);
    if(!w)
        return;
    pOpenTest = w;
    t_line[0].setText(pOpenTest->windowTitle());
}
То он не может конвертировать QMdiSubWindow* в Test*. И соответственно дальше ретурна дело не идет. Если я пишу:
Test *w = qobject_cast<Test *>(wid->widget());
То все правильно привсаивается, меняются параметры, но при закрытии все падает.
Еще я пытался сделать так, у меня есть указатель который указывает на коно которое активно и зменяет его или забирает от туда данные. Указатель класса Test*. Делал как QMdiSubWindow. И изменял параметры через pOpenTest->widget()->myMethod();

Сообщение отредактировал breeve - 14.5.2010, 15:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
breeve
  опции профиля:
сообщение 13.5.2010, 15:31
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

Спасибо сказали: 9 раз(а)




Репутация:   1  


grio, сделал так как ты сказал, те же яйца только в профиль.. Программа все равно падает

void TestCreator::newTest()
{
    Test* pTest = new Test(this);
    pTest->setAttribute(Qt::WA_DeleteOnClose);
    QMdiSubWindow *wid = new QMdiSubWindow(this);
    wid->setAttribute(Qt::WA_DeleteOnClose);
    connect(pTest, SIGNAL(destroyed()), wid, SLOT(close()), Qt::AutoConnection);
    wid->setWidget(pTest);
    wid->setWindowTitle(tr("Unnamed Test"));
    createNewTest(wid);
    t_line[0].setText(pOpenTest->windowTitle());
}

void TestCreator::createNewTest(QMdiSubWindow *p_sub)
{
    QMdiSubWindow* sub = mainArea->addSubWindow(p_sub);
    p_sub->setAttribute(Qt::WA_DeleteOnClose);
    p_sub->show();
}


Сообщение отредактировал breeve - 13.5.2010, 15:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 13.5.2010, 17:07
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Цитата(breeve @ 13.5.2010, 15:31) *
grio, сделал так как ты сказал, те же яйца только в профиль.. Программа все равно падает


Получается, что возможно проблема не связана с MdiArea.

Зачем ты используешь qobject_cast, когда есть специальная функция QMdiArea::currentSubWindow () const




Сообщение отредактировал grio - 13.5.2010, 18:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 7:04