crossplatform.ru

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


  Ответ в [Не решено]MdiArea, закрытие потомков
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
grio Дата 18.5.2010, 17:33
 
Цитата(breeve @ 14.5.2010, 12:54) *
Исправил я одну проблему осталась другая. Как мне отлавливать смену фокуса на любое другое приложение? Программа падает если я нажимаю куда угодно только не на нее.


Ящитаю, твой код надо пересмотреть в сторону использования механизма сигналов и слотов для взаимодействия потомков.
breeve Дата 14.5.2010, 12:54
  Исправил я одну проблему осталась другая. Как мне отлавливать смену фокуса на любое другое приложение? Программа падает если я нажимаю куда угодно только не на нее.
breeve Дата 14.5.2010, 9:48
 
Цитата(grio @ 13.5.2010, 18:07) *
Зачем ты используешь qobject_cast, когда есть специальная функция QMdiArea::currentSubWindow () const

Есть функция но она возвращает QMdiSubWindow *. А мне необходимо далее использовать методы класса который я вставил методом addSubWindow() . Я могу также сделать currentSubWindow()->widget()->а далее мой метод,но только это не возможно поскольку возвращает он QWidget* а не указатель на мой порожденный от QWidget класс, потому я и перевожу)

Исправил. В функции смена фокуса вставил такую строку:
if(mainArea->subWindowList().isEmpty())
        return;
grio Дата 13.5.2010, 17:07
 
Цитата(breeve @ 13.5.2010, 15:31) *
grio, сделал так как ты сказал, те же яйца только в профиль.. Программа все равно падает


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

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


breeve Дата 13.5.2010, 15:31
  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();
}
grio Дата 13.5.2010, 15:05
  Когда закрываешь дочернее окно - посылай сигнал родителю.
Я делаю так, к примеру:
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();
}
breeve Дата 13.5.2010, 15:02
  Заметил такую особенность что программа падает, не при закрытии окна-потомка, а если фокус с окна-потомка перейдет на что-либо другое. если перевести фокус на другое приложение, мое тоже падает.
breeve Дата 13.5.2010, 13:49
  Если в 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();
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 0:37