Название: QComboBox - отдать фокус родителю Отправлено: Marat(Qt) от Декабря 14, 2009, 14:49 Есть виджет, на нем два комбобокса лежат. После работы с комбобоксом (изменение значения выбором в выпадающем списке или просто просмотр списка путем щелкания по самому комбобоксу с целью показать/скрыть список) необходимо вернуть фокус виджету, на котором лежит комбобокс. Например:
connect(ui->tip,SIGNAL(activated(int)),this,SLOT(setFocus())); где ui->tip - комбобокс. Данный коннект решает половину проблемы, возврат фокуса в случае выбора элемента из выпавшего списка, но если пользователь не щелкал по списку, а закрыл список щелкнув по боксу второй раз, то фокус останется у бокса, что не допустимо. Судя по всему, сигналы задачу не решат, но очень хочется верить что есть какой-то финт ушами, способный быстро и хитро достигнуть поставленной цели. Собственно откуда такая задача: Виджет с двумя комбобоксами - это хитрый делегат, обеспечивающий, на мой взгляд удобное заполнение таблицы. Идея - школы стоят в разных городах, в первом боксе выбираем город, происходит фильтрация и во втором боксе доступны только школы этого города. Суть проблемы: делегат сохраняет данные в модель только в момент своего исчезновения, но если в фокусе один из комбобоксов делегата а не он сам, то при щелчке на свободную область в tableview или какой-либо виджет вне таблицы делегат не исчезает, а select модели до его исчезновения приводит к исчезновению делегата вместе с произведенными в нем изменениями. Название: Re: QComboBox - отдать фокус родителю Отправлено: igor_bogomolov от Декабря 14, 2009, 16:52 Виджет с двумя комбобоксами - это хитрый делегат, обеспечивающий, на мой взгляд удобное заполнение таблицы. ... ...при щелчке на свободную область в tableview или какой-либо виджет вне таблицы делегат не исчезает, а select модели до его исчезновения приводит к исчезновению делегата вместе с произведенными в нем изменениями. До конца так и не понял какое точно поведение нужно получить. Приведу свой пример, надеюсь поможет ) Задача тек же была редактировать данные через QComboBox. При этом, только нажатие Enter фиксирует данные в модели. Любые другие действия должны приводить к откату данных. В том числе и потеря фокуса. Пришлось писать вот такого уродца: Код
Вы можете подобным образом отлавливать потерю фокуса, и выполнять свои действия. :) Название: Re: QComboBox - отдать фокус родителю Отправлено: Marat(Qt) от Декабря 14, 2009, 20:05 Беда в том что мне нужно не отловить потерю фокуса, а заставить combobox потерять его. Но стоит поискать событие закрытия выпадающего списка.
Название: Re: QComboBox - отдать фокус родителю Отправлено: shadone от Декабря 14, 2009, 22:24 установка focusProxy не поможет?
Название: Re: QComboBox - отдать фокус родителю Отправлено: break от Декабря 14, 2009, 23:35 Цитировать Беда в том что мне нужно не отловить потерю фокуса, а заставить combobox потерять его. а если другому виджету сказать setFocus - то комбобокс ведь потеряет его?Название: Re: QComboBox - отдать фокус родителю Отправлено: Marat(Qt) от Декабря 15, 2009, 10:42 Потеряет. Но нужно знать когда терять его. В стандартном комбобоксе нет нужного мне сигнала. Придется писать обработщик события. В общем копать надо.
Надеялся что кто-нибудь копал уже, раз нет - сам буду разбираться. Всем спасибо. Название: Re: QComboBox - отдать фокус родителю Отправлено: break от Декабря 16, 2009, 00:45 А если поставить вашим комбикам focusPlicy = NoFocus - то может получится то поведение которое вы хотите? - а для заполнения с клавиатуры предусмотреть горячие клавиши??? или другой вариант focusPolicy.
Название: Re: QComboBox - отдать фокус родителю Отправлено: Marat(Qt) от Декабря 17, 2009, 11:46 Если поставить NoFocus, то не будет выпадающего списка и комбо будет не лучше чем label
Название: Re: QComboBox - отдать фокус родителю Отправлено: Alp от Декабря 17, 2009, 13:50 Разве дополнительное связывание с сигналом currentIndexChanged не решит проблему?
Название: Re: QComboBox - отдать фокус родителю Отправлено: break от Декабря 17, 2009, 18:10 Цитировать Если поставить NoFocus, то не будет выпадающего списка и комбо будет не лучше чем label Ошибаешься - ficusPolicy отвечает только за фокус с клавиатуры и никак не связан с мышкой комбобокс работает как и раньше - кинь 2 компбо на форму и нажви предварительный просмотр в дизайнере!!!Название: Re: QComboBox - отдать фокус родителю Отправлено: shadone от Декабря 17, 2009, 19:22 Цитировать Если поставить NoFocus, то не будет выпадающего списка и комбо будет не лучше чем label Ошибаешься - ficusPolicy отвечает только за фокус с клавиатуры и никак не связан с мышкой комбобокс работает как и раньше - кинь 2 компбо на форму и нажви предварительный просмотр в дизайнере!!!Название: Re: QComboBox - отдать фокус родителю Отправлено: Marat(Qt) от Декабря 17, 2009, 20:40 Цитировать Если поставить NoFocus, то не будет выпадающего списка и комбо будет не лучше чем label Ошибаешься - ficusPolicy отвечает только за фокус с клавиатуры и никак не связан с мышкой комбобокс работает как и раньше - кинь 2 компбо на форму и нажви предварительный просмотр в дизайнере!!!p.s. Цитировать Разве дополнительное связывание с сигналом currentIndexChanged не решит проблему? если после щелчка по комбобоксу текущий индекс не поменяется, то сигнал не будет выслан и бокс останется с фокусом, изначально все так и было, но это явно не то чего я хотел |