Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alex_C от Апрель 23, 2012, 15:16



Название: Показать окно
Отправлено: Alex_C от Апрель 23, 2012, 15:16
По клику меню нужно манипулировать окнами:
- если окно не было создано, создать его, показать и передать ему фокус.
- если окно уже создано, но не активно - переместить его на передний план и передать ему фокус.
- если окно активно - закрыть его.
Делаю так:

Код:
void MainForm::showWindow()
{
    QAction *a = qobject_cast<QAction *>(sender());

    AbstractLogWindow *w = findWindow(a->objectName());
    if(w)
    {
        if(a->data().toInt() != int(lastFocusForm))
        {
            w->show();
            w->setFocus();
        }
        else
            w->close();
    }
    else
    {
        w = createWindow(a);
        if(w)
        {
            w->show();
            w->setFocus();
        }
    }
}

У меня не правильно работает вот этот кусок -

Код:
        if(a->data().toInt() != int(lastFocusForm))
        {
            w->show();
            w->setFocus();
        }
        else
            w->close();

у меня правильно определяется, что окно не активно, но метод show() - не срабатывает и фокус окну не передается. Я так понимаю что в Qt метод show() срабатывает только когда окно не открыто. Как тут правильно сделать?


Название: Re: Показать окно
Отправлено: kambala от Апрель 23, 2012, 15:47
см. методы raise() и activateWindow()


Название: Re: Показать окно
Отправлено: Alex Custov от Апрель 23, 2012, 15:57
Код
C++ (Qt)
   w->setWindowState(w->windowState() & ~Qt::WindowMinimized);
   w->raise();
   w->activateWindow();
 


Название: Re: Показать окно
Отправлено: Alex_C от Апрель 23, 2012, 16:44
Спасибо!
С этим все понятно.
При вызове activateWindow не происходит событие focusInEvent. В результате чего не получается узнать, какое окно было последним активным, чтоб при клике по меню главного окна это окно или закрыть, или показать. Как это можно обойти?

Да и еще чтоб лишнюю тему не плодить - если у QAction указано setCheckable(true), то при клике по этому актион оно автоматом будет галочку ставить/убирать. А можно ли сделать так, что галочка будет выставляться/сниматься  только когда я буду указывать setCheched явно?