Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: mal от Декабрь 31, 2009, 16:42



Название: QComboBox - состояние
Отправлено: mal от Декабрь 31, 2009, 16:42
Как проверить состояние комбобокса - showPopup  он в данный момент или hidePopup ?  ???


Название: Re: QComboBox - состояние
Отправлено: Dendy от Декабрь 31, 2009, 17:11
Так? comboBox->view()->isVisible()


Название: Re: QComboBox - состояние
Отправлено: Karl-Philipp от Декабрь 31, 2009, 17:17
а можно ли так сделать:

Переопределить void QComboBox::showPopup (), void QComboBox::hidePopup ()  . B них имитировать сигнал, связанный со слотом, который будет устанавливать значение некоторой переменной типа bool isComboPopup.


Название: Re: QComboBox - состояние
Отправлено: mal от Декабрь 31, 2009, 17:29
Dendy

Да, так работает, но есть проблемка:
Я переопределяю в QComboBox keyPressEvent, чтоб раскрывать его по нужной мне клавише.
Когда QComboBox в закрытом состоянии keyPressEvent ловиться. А когда раскрыт - фокус находится в comboBox->view().
Соответственно поймать keyPressEvent , чтоб  закрыть QComboBox, уже не получается.
Возможно следует попробовать то, что предлагает terlan.
Или есть другой путь? Не хотелось бы наследоваться еще и от QAbstractItemView  и ловить keyPressEvent в нем :)

Или установить eventFilter на view  комбобокса?


Название: Re: QComboBox - состояние
Отправлено: Dendy от Декабрь 31, 2009, 17:53
Если это горячая клавиша, то её можно установить глобально с помощью QShortcut. Если же через событие - то наследоваться не нужно, пользуйтесь eventFilter(). Попробуйте фильтровать comboBox->view() и comboBox->view()->viewport() на предмет нужной клавиши.


Название: Re: QComboBox - состояние
Отправлено: mal от Декабрь 31, 2009, 17:56
Так и сделал :
Если комбобокс находиться в состоянии hide, ловлю keyPressEvent в нем.
Установил eventFilter  для view комбобокса, и keyPressEvent из view обрабатываю в eventFilter комбобокса.
Проблема решена.  :D
Всем спасибо.