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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
XXL
  опции профиля:
сообщение 23.12.2009, 17:27
Сообщение #2


Студент
*

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

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




Репутация:   0  


У меня не отлавливается сигнал выделения...Но только в случае этого конкретного выделения...В случае выделения текста пользователем- все в порядке-входим в соответствующий обаботчик!)
В итоге пока будет так (криво, конечно, но проблему решает):
...

m_pLineEdit = m_pComboBox->lineEdit();
...

void CWorkForm::OnTextChanged(const QString& strText)
{
    ...

    int pos = m_pLineEdit->cursorPosition();

    m_pComboBox->setItemText(m_iCurIndex, strText);

    connect(m_pLineEdit, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(OnPosChanged()));
    
    m_pLineEdit->setCursorPosition(pos);
}

void CWorkForm::OnPosChanged()
{
    bool bSel = m_pLineEdit->hasSelectedText();
    if (!bSel)
        return;

    m_pLineEdit->deselect();

    disconnect(m_pLineEdit, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(OnPosChanged()));
}


Это позволяет сбросить ненужное выделение, но в то же время позволяет пользователю выделять текст, сбрасывать выделение и как угодно редактировать текст). Кстати, при сбросе выделения m_pLineEdit->deselect(); соответствующий сигнал изменения выделения отлаливается) Но с этим я еще разберусь)

Спасибо вам большое!)

Сообщение отредактировал XXL - 23.12.2009, 17:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




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