Текст в редактируемом комбобоксе и слот accept() диалога |
Здравствуйте, гость ( Вход | Регистрация )
Текст в редактируемом комбобоксе и слот accept() диалога |
radislav72 |
9.5.2010, 19:32
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 1.4.2010 Пользователь №: 1585 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте!
Есть диалоговое окно, и на нем несколько LineEdit, один редактируемый Combobox и ButtonBox. При наборе в комбобоксе текста работает autocomplete, и автоматически заполняется нужным текстом. Когда юзер нажимает кнопку "ОК" в ButtonBox-е, срабатывает слот accept(), в котором читаются все введенные значения формы и записываются в БД- то есть все Ок Но тут возникла такая проблемка: когда юзер нажимает на клавиатуре кнопку Enter при активном комбобоксе, то тоже срабатывает тот же слот accept(), но попытка чтения введенного в комбобокс значения всегда дает пустую строку. Что надо сделать, чтобы прочитать не пустую строку, а введенный текст? "Обходной маневр" в виде принудительной программной смены фокуса типа ui->ledBName->setFocus(); не дал ничего. Вид окна с комбобоксом: Если в ситуации, показанной на рисунке, нажать клавишу Enter, то чтение строки из комбобокса в слоте accept()
даст пустую строку, хотя там явно есть текст |
|
|
molchanoviv |
10.5.2010, 18:56
Сообщение
#2
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
А код покажи. А то у меня такой код
отрабатывает. |
|
|
radislav72 |
10.5.2010, 20:36
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 1.4.2010 Пользователь №: 1585 Спасибо сказали: 0 раз(а) Репутация: 0 |
А код покажи. А то у меня такой код ... отрабатывает. У меня несколько другой код: в слоте accept() диалога выполняется проверка введенных даных и тут же считываются поля формы и сохраняются в полях класса.
А сам диалог показывается стандартно:
Причем, если при нажатии клавиши Enter активным является не комбобока (то-есть после ввода текста в комбобокс нажать Tab и перейти к другому виджету), то все работает нормально. Если же ввести текст в комбобокс и нажать Enter, то текст считывается пустой. Но я, кажется, уже понял причину: дело в автозаполняемом комбобоксе. Вроде-бы дело в том, что при редактировании текста в комбобоксе в режиме autocomplete нажатие Enter должно "фиксировать" введенный текст (то-есть, при первом нажатии Enter в autocomplete-комбооксе етот автодобавленный текст, частично введенный с клавиатуры и частично дополненный автоматикой, фиксируется- при етом курсор преходит в конец поля редактирования комбобокса). Вместе с тем, нажатие Enter вызывает accept диалога. И accept срабатывает ДО того, как "зафиксируется" текст в комбобоксе. По крайней мере, чтение текста из комбобокса в eventFilter, настроенном на QEvent::KeyPress (и key() == Qt::Key_Return), дало нужный результат. Возможно, существует получше решение. Но у меня пока так. Возможно, следует как-то просто изменить порядок срабатывания событий. |
|
|
Текстовая версия | Сейчас: 14.1.2025, 6:15 |