crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Сброс выделения текста в редактируемом QComboBox
XXL
  опции профиля:
сообщение 22.12.2009, 0:29
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 26.4.2009
Пользователь №: 708

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем доброй ночи!
Хочу задать маленький вопрос. Есть редактируемый QComboBox. Не могу понять, почему в его QLineEdit производится выделение текста. А именно отлавливаю сигнал изменения текста editTextChanged(const QString&). Получаю текущую позицию курсора, устанавливаю новый текст в текущую ячейку, а потом снова возвращаю курсор на полученную позицию:
void CWorkForm::OnEditTextChanged(const QString& strText)
{
    int pos = m_pComboBox->lineEdit()->cursorPosition();

    m_pComboBox->setItemText(iCurIndex, strText);

...............................................................

    m_pComboBox->lineEdit()->setCursorPosition(pos);
}


После этого в редактируемой строке выделяется кусок слова от последней позиции до pos...Также была испробована функция void QLineEdit::cursorBackward ( bool mark, int steps = 1 ) с mark = false и количеством шагов, равным количеству символов от конца слова до текущей позиции. Результат аналогичный...Почему такое может быть? А хотелось бы параллельно с редактированием слова редактировать ячейку без выделения текста...

Сообщение отредактировал XXL - 22.12.2009, 0:30
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 23.12.2009, 9:57
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Можно ловить сигнал
void QLineEdit::selectionChanged ()   [signal]
и в обработчике делать
void QLineEdit::deselect ()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
XXL
  опции профиля:
сообщение 23.12.2009, 11:07
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 26.4.2009
Пользователь №: 708

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 23.12.2009, 9:57) *
Можно ловить сигнал
void QLineEdit::selectionChanged ()   [signal]
и в обработчике делать
void QLineEdit::deselect ()


Этот сигнал в данном случае не отлавливается, но обнаружилось когда происходит выделение текста.
Отлавливается сигнал
cursorPositionChanged ( int old, int new )

Предположим, есть слово - конечная позиция курсора 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. Это и дает выделение текста. Но почему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 10.1.2025, 2:51