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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
grio
  опции профиля:
сообщение 13.5.2010, 15:05
Сообщение #2


Студент
*

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

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




Репутация:   0  


Когда закрываешь дочернее окно - посылай сигнал родителю.
Я делаю так, к примеру:
void MainWindow::on_action_goods_triggered()
{
    goods_form *E_F = new goods_form();
    E_F->setAttribute(Qt::WA_DeleteOnClose);
    QMdiSubWindow *widg = new QMdiSubWindow(this);
    widg->setAttribute(Qt::WA_DeleteOnClose);
    QObject::connect(E_F, SIGNAL(signal_closing()), widg, SLOT(close()), Qt::AutoConnection);
    widg->setWidget(E_F);
    widg->setWindowTitle(tr("Список товаров"));
    widg->setWindowIcon(QIcon (":/icons/goods.ico"));
    widg->setGeometry(QRect(10, 10, 1100, 500));
    add_new_window(widg);
}

void MainWindow::add_new_window(QMdiSubWindow *p_sub)
{
    QMdiSubWindow *sub = ui->mdiArea->addSubWindow(p_sub);
    sub->setAttribute(Qt::WA_DeleteOnClose);
    sub->show();
}


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

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


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


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




RSS Текстовая версия Сейчас: 28.3.2024, 15:46