Russian Qt Forum
Июнь 16, 2024, 00:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Показать окно  (Прочитано 3067 раз)
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() срабатывает только когда окно не открыто. Как тут правильно сделать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #1 : Апрель 23, 2012, 15:47 »

см. методы raise() и activateWindow()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Апрель 23, 2012, 15:57 »

Код
C++ (Qt)
   w->setWindowState(w->windowState() & ~Qt::WindowMinimized);
   w->raise();
   w->activateWindow();
 
Записан
Alex_C
Гость
« Ответ #3 : Апрель 23, 2012, 16:44 »

Спасибо!
С этим все понятно.
При вызове activateWindow не происходит событие focusInEvent. В результате чего не получается узнать, какое окно было последним активным, чтоб при клике по меню главного окна это окно или закрыть, или показать. Как это можно обойти?

Да и еще чтоб лишнюю тему не плодить - если у QAction указано setCheckable(true), то при клике по этому актион оно автоматом будет галочку ставить/убирать. А можно ли сделать так, что галочка будет выставляться/сниматься  только когда я буду указывать setCheched явно?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 22.