Сброс выделения текста в редактируемом QComboBox |
Здравствуйте, гость ( Вход | Регистрация )
Сброс выделения текста в редактируемом QComboBox |
XXL |
22.12.2009, 0:29
Сообщение
#1
|
Студент Группа: Участник Сообщений: 30 Регистрация: 26.4.2009 Пользователь №: 708 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем доброй ночи!
Хочу задать маленький вопрос. Есть редактируемый QComboBox. Не могу понять, почему в его QLineEdit производится выделение текста. А именно отлавливаю сигнал изменения текста editTextChanged(const QString&). Получаю текущую позицию курсора, устанавливаю новый текст в текущую ячейку, а потом снова возвращаю курсор на полученную позицию:
После этого в редактируемой строке выделяется кусок слова от последней позиции до pos...Также была испробована функция void QLineEdit::cursorBackward ( bool mark, int steps = 1 ) с mark = false и количеством шагов, равным количеству символов от конца слова до текущей позиции. Результат аналогичный...Почему такое может быть? А хотелось бы параллельно с редактированием слова редактировать ячейку без выделения текста... Сообщение отредактировал XXL - 22.12.2009, 0:30 |
|
|
Litkevich Yuriy |
22.12.2009, 16:23
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
XXL |
22.12.2009, 17:50
Сообщение
#3
|
Студент Группа: Участник Сообщений: 30 Регистрация: 26.4.2009 Пользователь №: 708 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ячейка - текущий комбобоксовский item для которого вызывается setItemText (нужно редактировать его параллельно с комбобоксовским QLineEdit - ввожу символ в QLineEdit, и сразу же соответственно меняю содержимое текущей ячейки).
Нет, сигнал повторно не посылается. У меня проблема в том, если редактировать слово в QLineEdit где-то в середине, после setItemText курсор смещается на последнюю позицию. Я его хочу вернуть на место, чтобы в случае необходимости продолжить редактирование, а программное перемещение происходит с выделением текста, которого никак не удается избежать... |
|
|
igor_bogomolov |
23.12.2009, 9:57
Сообщение
#4
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Можно ловить сигнал
и в обработчике делать
|
|
|
XXL |
23.12.2009, 11:07
Сообщение
#5
|
Студент Группа: Участник Сообщений: 30 Регистрация: 26.4.2009 Пользователь №: 708 Спасибо сказали: 0 раз(а) Репутация: 0 |
Можно ловить сигнал и в обработчике делать
Этот сигнал в данном случае не отлавливается, но обнаружилось когда происходит выделение текста. Отлавливается сигнал
Предположим, есть слово - конечная позиция курсора 12. Перемещаем курсор на начало - в нулевую позицию (old-12, new-0) и вводим символ. pos = 1. После setItemText old = 0, new = 13. Если не вызывать функцию setCursorPosition(pos), больше в обработчик сигнала cursorPositionChanged не входим. Но если вызвать setCursorPosition(pos), то попадаем в этот обработчик еще 3 раза! Первый - соответственно дает old-13 new-1, а затем происходит что-то мне непонятное: old-1, new-13 и old-13, new-1. Это и дает выделение текста. Но почему? |
|
|
igor_bogomolov |
23.12.2009, 15:51
Сообщение
#6
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Этот сигнал в данном случае не отлавливается Как это не отлавливается. Выделение есть, а сигнал не испускается main_test.cpp
.pro
|
|
|
Litkevich Yuriy |
23.12.2009, 16:16
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
igor_bogomolov |
23.12.2009, 16:47
Сообщение
#8
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
CONFIG += teambuilder qtestlib warn_on debug create_prl link_prl Я на самом деле понятия не имею что такое teambuilder, create_prl, link_prl. Этот конфиг у меня после общения с тех поддержной появился. Вот и пользуюсь. На самом деле их можно убрать, ничего не изменится. Самому не понятно какого черта выделение появляется. Но проблему обойти указаным выше способом можно. Ну, и может кто сам захочет поэкспериментировать Сообщение отредактировал igor_bogomolov - 23.12.2009, 16:49 |
|
|
Litkevich Yuriy |
23.12.2009, 17:05
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Я на самом деле понятия не имею что такое teambuilder teambuilder - распределённая среда компиляции программ, работает только на *Nix'ах, тык |
|
|
XXL |
23.12.2009, 17:27
Сообщение
#10
|
Студент Группа: Участник Сообщений: 30 Регистрация: 26.4.2009 Пользователь №: 708 Спасибо сказали: 0 раз(а) Репутация: 0 |
У меня не отлавливается сигнал выделения...Но только в случае этого конкретного выделения...В случае выделения текста пользователем- все в порядке-входим в соответствующий обаботчик!)
В итоге пока будет так (криво, конечно, но проблему решает):
Это позволяет сбросить ненужное выделение, но в то же время позволяет пользователю выделять текст, сбрасывать выделение и как угодно редактировать текст). Кстати, при сбросе выделения m_pLineEdit->deselect(); соответствующий сигнал изменения выделения отлаливается) Но с этим я еще разберусь) Спасибо вам большое!) Сообщение отредактировал XXL - 23.12.2009, 17:38 |
|
|
Текстовая версия | Сейчас: 9.1.2025, 18:50 |