Название: QListView и activateWindow - теряется CurrentIndex Отправлено: Marat(Qt) от Апрель 23, 2010, 17:26 Создаю свой comboBox. По нажатии кнопки появляется QListView, который к родителю не привязан - т.е. это самостоятельное окно. Окно это без границ и StaysOnTop. При потере фокуса оно автоматически исчезает. Проблема в том, что если при появлении виджета он не получит фокус, то куда бы мы не кликали - фокуса он не потеряет.
Можно конечно показывать его модально, но тогда он не даст щелкнуть по родителю и лишить виджет фокуса. Казалось бы есть одно простое решение - activateWindow. при вызове этого метода сразу после show - он не срабатывает, но срабатывает по таймеру - через 30 мсек. Сделав таймер и все остальное - я уже был готов начать использовать получившийся виджет. Но после activateWindow - currentIndex у списка часто переключается на -1. если включить список и скрыть его, не поменяв currentIndex - то как правило, currentIndex не меняется на -1, но если мы вдруг поменяли current, вероятность потери индекса почти 100%, а это для меня критично p.s. Дополню: потеря текущего итема происходит если: 1) мы щелкнули на другой (не текущий) итем, список исчезает(setVisible(false)), жмем на кнопку - список появился, активировался и тут же выделение выбранного элемента пропало (именно после получения фокуса, во в методе, вызывающем activateWindow currentIndex проверялся до и после выполнения activate'а); 2) мы поменяли текущий итем не используя список ("не открывая" его), например прокруткой колеса мыши над lineEdit'ом, после этого показываем список(нажисая всё ту же кнопку) и видим тоже поведение что и в 1). p.p.s. Вижу пока одно решение: по первому вызову timeOut - запомнить текущий индекс и вызвать activateWindow, по второму - setCurrentIndex. Решение слабое, так же как и использование таймера после show, хотелось бы от всего этого избавиться, но нужен способ Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: SABROG от Апрель 23, 2010, 18:12 Разве проблемы не исчезнут сами собой, если выставить QListView флаг Qt::Popup?
Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: Marat(Qt) от Апрель 23, 2010, 18:19 Разве проблемы не исчезнут сами собой, если выставить QListView флаг Qt::Popup? Вероятно, но как тогда обработать клик за пределами QListView, пока у меня не получается лишить его фокуса, любой клик в любой области рабочего стола кроме самого списка игнорируется.Использую Qt::Tool, но он не берет на себя фокус Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: Marat(Qt) от Апрель 23, 2010, 19:36 Немного порассуждав, решил что Qt::Popup действительно лучше похож, но нужно как-то переписать mousePressEvent, чтобы клик за пределами этого виджета скрывал его
Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: SABROG от Апрель 23, 2010, 19:51 Немного порассуждав, решил что Qt::Popup действительно лучше похож, но нужно как-то переписать mousePressEvent, чтобы клик за пределами этого виджета скрывал его Странно то, что у тебя не скрывает. Его стандартное поведение как раз скрывать. Приаттачил пример, окно скрывается даже если я по рабочему столу кликаю или по кнопке "Пуск". Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: Marat(Qt) от Апрель 23, 2010, 20:19 Ваша реализация выглядит интересно и работает. Но проблему скрытия я, как ни странно, устранил вот таким вот способом:
Код: bool CMappedComboBox::eventFilter(QObject *obj, QEvent *e) И, кстати, выяснилось, что потеря currentIndex'а вовсе не в activateWindow.. Продолжаю поиски Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: lit-uriy от Апрель 23, 2010, 21:06 >>почему это не скрывает список при клике по нему самому - загадка.
клик - нажатие, затем отпускание. Я полагаю, что нужно обрабатывать отпускание кнопки мыши. Название: Re: QListView и activateWindow - теряется CurrentIndex Отправлено: Marat(Qt) от Апрель 23, 2010, 23:45 Ребус разгадан. Проблема была далеко не в том что было мной описано в первом посте.
Я просто запутался в моделях и не понял что происходит submit. Как я мог так проколоться, ведь все признаки были налицо. |