Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: focusOutEvent
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
flankerr
Мне надо чтобы когда диалог теряет фокус (т.е. заголовок диалога становиться серым) отрабатывала некая функция. Нашлась focusOutEvent
однако эта функция вызывается даже в том случае если фокус отали дочернему элементу на диалоге..
Как отловить ситуацию именно поетри фокуса а не превода фокуса на дочерние элементы ???
Litkevich Yuriy
посмотри в сторону enum Qt::FocusReason может оно.
trdm
зря вы там вот так написали:
void focusOutEvent(QFocusEvent *) { /*set code*/ }

скури внимательнее: http://doc.trolltech.com/4.3/qfocusevent.html
flankerr
чего то не понимаю я как это сделать....
а рабочего примера ни где найти не получается...
Litkevich Yuriy
flankerr, ну пиши, что сделал (исходник не забудь) и как себя ведет.
flankerr
наслудую класс от Ui
в конструторе ставлю
setFocus();
переопределяю
focusOutEvent(QFocusEvent *e)

а дальше при потери фокуса с диалога срабатывает focusOutEvent
и всё бы хорошо но только плин он так же срабатывает и на потрерю фокуса с любого дочернего элемента или установки фокуса на любой дочерний элемент

что делать с Qt::FocusReason я так и не понял
Litkevich Yuriy
flankerr, а пост trdm'а, ты не читал?

откуда такая фукция: focusOutEvent(QFocusEvent *e)?

вот какая функция должна быть:
QFocusEvent ( Type type, Qt::FocusReason reason = Qt::OtherFocusReason )
и поумолчанию АзерРесон, т.е. любой.
а если посмотреть возможные значения Qt::FocusReason, то можно там увидеть такой вариант:
Qt::ActiveWindowFocusReason 3 The window system made this window either active or inactive.
я думаю это то, что тебе надо.
flankerr
читал пост trdm'а но я не понимаю как это использовать.
залаез в асситант увидел focusOutEvent(QFocusEvent *e) попробывал действитеьлно вызывается
а QFocusEvent это же класс а не функция
и про Qt::ActiveWindowFocusReason я читал

но как это всё связать я не понмиаю :(
в MSDN какой никакой а примерчик найти можно а ттут типа есть такая фенка и всё а как ей пользовать а хз...
Гость
Тебе нужно выполнить функцию - когда юзер другое приложение активирует или когда в твоем приложение просто другое окно выбирает ?
Litkevich Yuriy
Цитата(Гость_Гость_* @ 15.9.2008, 19:21) *
другое приложение активирует или когда в твоем приложение просто другое окно выбирает
И то, и то, просто по факту: Окно потеряло фокус
Red Devil
дык, это разные события.
Если нужно узнать что окно потеряло фокус, потому что пользователь установил фокус на другое приложение, то это другое событие ловить нужно. Что-то там deactivate.
flankerr
Цитата(Red Devil @ 16.9.2008, 17:19) *
дык, это разные события.Если нужно узнать что окно потеряло фокус, потому что пользователь установил фокус на другое приложение, то это другое событие ловить нужно. Что-то там deactivate.

не на другое приложение а на другое окно в рамках одного приложения - хотя думаю тут разницы особой нет
вот не нашёл я в ассистенсе более подходящего.
конечно есть QEvent::WindowDeactivate но как его словить я не понял пока...
Red Devil
Цитата(flankerr @ 22.9.2008, 18:19) *
а на другое окно в рамках одного приложения - хотя думаю тут разницы особой нет

есть

Цитата(flankerr @ 22.9.2008, 18:19) *
конечно есть QEvent::WindowDeactivate но как его словить я не понял пока...

bool event(QEvent *);
flankerr
Цитата
bool event(QEvent *);


т.е. на каждое событие дёргатьevent(QEvent *) и делать проверку на нужный тип события ? както некрасиво....
anonymous
Цитата(trdm @ 11.9.2008, 20:49) *
зря вы там вот так написали:
void focusOutEvent(QFocusEvent *) { /*set code*/ }

скури внимательнее: http://doc.trolltech.com/4.3/qfocusevent.html


А что собственно говря он неправильно сделал. Человек переопределил метод focusOutEvent. Что нетак?

Кури внимательнее: http://doc.trolltech.com/4.3/qwidget.html#focusOutEvent
anonymous
Цитата(Litkevich Yuriy @ 15.9.2008, 12:36) *
flankerr, а пост trdm'а, ты не читал?

откуда такая фукция: focusOutEvent(QFocusEvent *e)?


http://doc.trolltech.com/4.3/qwidget.html#focusOutEvent

Цитата(Litkevich Yuriy @ 15.9.2008, 12:36) *
вот какая функция должна быть:
QFocusEvent ( Type type, Qt::FocusReason reason = Qt::OtherFocusReason )


Это не "функция", а конструктор класс QFocusEvent
anonymous
Цитата(flankerr @ 24.9.2008, 15:07) *
Цитата
bool event(QEvent *);

т.е. на каждое событие дёргатьevent(QEvent *) и делать проверку на нужный тип события ? както некрасиво....



Да ну, брось, все красиво ;)

bool YourWidget::event ( QEvent * event )
{
    if (event->type() == QEvent::WindowDeactivate) {
        // do_something
        return true;
    }
    return QWidget::event(event);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.