crossplatform.ru

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

flankerr
  опции профиля:
сообщение 11.9.2008, 17:55
Сообщение #1


Активный участник
***

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

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




Репутация:   0  


Мне надо чтобы когда диалог теряет фокус (т.е. заголовок диалога становиться серым) отрабатывала некая функция. Нашлась focusOutEvent
однако эта функция вызывается даже в том случае если фокус отали дочернему элементу на диалоге..
Как отловить ситуацию именно поетри фокуса а не превода фокуса на дочерние элементы ???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 16)
Litkevich Yuriy
  опции профиля:
сообщение 11.9.2008, 18:01
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


посмотри в сторону enum Qt::FocusReason может оно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 11.9.2008, 20:49
Сообщение #3


Дмитрий Трошин
****

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

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




Репутация:   6  


зря вы там вот так написали:
void focusOutEvent(QFocusEvent *) { /*set code*/ }

скури внимательнее: http://doc.trolltech.com/4.3/qfocusevent.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 15.9.2008, 11:20
Сообщение #4


Активный участник
***

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

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




Репутация:   0  


чего то не понимаю я как это сделать....
а рабочего примера ни где найти не получается...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.9.2008, 11:37
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


flankerr, ну пиши, что сделал (исходник не забудь) и как себя ведет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 15.9.2008, 12:27
Сообщение #6


Активный участник
***

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

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




Репутация:   0  


наслудую класс от Ui
в конструторе ставлю
setFocus();
переопределяю
focusOutEvent(QFocusEvent *e)

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

что делать с Qt::FocusReason я так и не понял
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.9.2008, 12:36
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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
  опции профиля:
сообщение 15.9.2008, 13:16
Сообщение #8


Активный участник
***

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

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




Репутация:   0  


читал пост trdm'а но я не понимаю как это использовать.
залаез в асситант увидел focusOutEvent(QFocusEvent *e) попробывал действитеьлно вызывается
а QFocusEvent это же класс а не функция
и про Qt::ActiveWindowFocusReason я читал

но как это всё связать я не понмиаю :(
в MSDN какой никакой а примерчик найти можно а ттут типа есть такая фенка и всё а как ей пользовать а хз...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 15.9.2008, 15:21
Сообщение #9





Гости








    


Тебе нужно выполнить функцию - когда юзер другое приложение активирует или когда в твоем приложение просто другое окно выбирает ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.9.2008, 15:41
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Гость_Гость_* @ 15.9.2008, 19:21) *
другое приложение активирует или когда в твоем приложение просто другое окно выбирает
И то, и то, просто по факту: Окно потеряло фокус
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 16.9.2008, 16:19
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

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




Репутация:   3  


дык, это разные события.
Если нужно узнать что окно потеряло фокус, потому что пользователь установил фокус на другое приложение, то это другое событие ловить нужно. Что-то там deactivate.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 22.9.2008, 17:19
Сообщение #12


Активный участник
***

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

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




Репутация:   0  


Цитата(Red Devil @ 16.9.2008, 17:19) *
дык, это разные события.Если нужно узнать что окно потеряло фокус, потому что пользователь установил фокус на другое приложение, то это другое событие ловить нужно. Что-то там deactivate.

не на другое приложение а на другое окно в рамках одного приложения - хотя думаю тут разницы особой нет
вот не нашёл я в ассистенсе более подходящего.
конечно есть QEvent::WindowDeactivate но как его словить я не понял пока...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 22.9.2008, 17:33
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

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




Репутация:   3  


Цитата(flankerr @ 22.9.2008, 18:19) *
а на другое окно в рамках одного приложения - хотя думаю тут разницы особой нет

есть

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

bool event(QEvent *);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 24.9.2008, 15:07
Сообщение #14


Активный участник
***

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

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




Репутация:   0  


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


т.е. на каждое событие дёргатьevent(QEvent *) и делать проверку на нужный тип события ? както некрасиво....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_anonymous_*
сообщение 24.9.2008, 15:58
Сообщение #15





Гости








    


Цитата(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_*
сообщение 24.9.2008, 16:00
Сообщение #16





Гости








    


Цитата(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_*
сообщение 24.9.2008, 16:06
Сообщение #17





Гости








    


Цитата(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);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 0:40