Russian Qt Forum
Октябрь 02, 2024, 11:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QComboBox - отмена выбора  (Прочитано 4298 раз)
Alexandr Az
Гость
« : Август 13, 2013, 11:51 »

Как можно отменить выбор значения ComboBox. Для примера: мы выбираем неугодное нам значение из списка, кляцаем на него, а комбобокс и ухом не повел, чтобы установить новое. currentIndexChanged не предлагать.

« Последнее редактирование: Август 13, 2013, 13:02 от Alexandr Az » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Август 13, 2013, 15:37 »

Цитировать
void QComboBox::highlighted(int index) [signal]
This signal is sent when an item in the combobox popup list is highlighted by the user. The item's index is passed.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Alexandr Az
Гость
« Ответ #2 : Август 13, 2013, 16:18 »

Цитировать
void QComboBox::highlighted(int index) [signal]
This signal is sent when an item in the combobox popup list is highlighted by the user. The item's index is passed.

Данный сигнал генерируется когда мы подсвечиваем выпадающие итемы, даже не выбираем, а бегаем по ним.
А моя задача - когда уже на нём кляцнул (т.е. выбрал) была возможность отменить выбор.
Записан
_OLEGator_
Гость
« Ответ #3 : Август 13, 2013, 16:32 »

В таком случае надо работать не с QComboBox, а с его вьюхой.
Можно повесить фильтр событий на уже имеющуюся вьюху, можно написать свою и установить QComboBox:

Код
C++ (Qt)
void QComboBox::setView ( QAbstractItemView * itemView )
QAbstractItemView * QComboBox::view () const

Я так полагаю надо сигналы блокировать от вьюхи, чтобы в QComboBox не менялось значение.
Записан
Alexandr Az
Гость
« Ответ #4 : Август 13, 2013, 19:53 »

В таком случае надо работать не с QComboBox, а с его вьюхой.
Можно повесить фильтр событий на уже имеющуюся вьюху, можно написать свою и установить QComboBox:

Код
C++ (Qt)
void QComboBox::setView ( QAbstractItemView * itemView )
QAbstractItemView * QComboBox::view () const

Я так полагаю надо сигналы блокировать от вьюхи, чтобы в QComboBox не менялось значение.

Вы совершенно правы. Как вы понимаете, я не хочу найти просто решение, я хочу найти простое решение. Т.е. может я не доглядел эту примитивную возможность? Однако нет, она отсутствует. С вьюхой ещё сложнее. Стояла задача (QAbstractItemView) запретить двигаться по вьюхе при определенных условиях (классическое передвижение по базе данных. Если текущую строку внесли не верно, либо её дорабатывайте, либо отменяйте. Но вы не можете сдвинутся с неё, пока она не удовлетворяет условиям). Чтобы это реализовать - это наследование от вьюхи с кучей копипасты с иходников - т.е.  фильтр событий, когда мы фильтруем все события и реализуем их заново (мыши, клавы). Такую простыню вставлять. Другими словами этой возможности у view нету. Если я её проморгал, как в контексте комбобокса,  так и в контексте view, ткните....

Вообщем-то задачка классическая про ComboBox. Я, конечно, реализовал её через события (мы меняем, потом проверяем, потом возвращаем. При этом блокируем сообщения, чтобы не было цикличности).

Может поясню для чего: классика - таблицы главная - подчиненная. Представьте QComboBox, в котором Вы выбираете значения, а в форме изменяется текст. Вот выбрали что-то - появился текст, который мы можем редактировать. Вот мы его отредактировали. И выбираем другое значение Combobox. И вот незадача, что делать с текстом. Записать? Отменить? А вдруг при записи ошибка (не соответствует критериям). Поэтому как бы всплывает диалог и спрашивает - что делать, данные то пропадут...
« Последнее редактирование: Август 13, 2013, 20:13 от Alexandr Az » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.334 секунд. Запросов: 22.