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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Текст в редактируемом комбобоксе и слот accept() диалога  (Прочитано 3791 раз)
radislav72
Гость
« : Май 08, 2010, 16:14 »

Здравствуйте!

Есть диалоговое окно, и на нем несколько LineEdit, один редактируемый Combobox и ButtonBox. При наборе в комбобоксе текста работает autocomplete, и автоматически заполняется нужным текстом.
Когда юзер нажимает кнопку "ОК" в ButtonBox-е, срабатывает слот accept(), в котором читаются все введенные значения формы и записываются в БД- то есть все Ок Улыбающийся

Но тут возникла такая проблемка: когда юзер нажимает на клавиатуре кнопку Enter при активном комбобоксе, то тоже срабатывает тот же слот accept(), но попытка чтения введенного в комбобокс значения всегда дает пустую строку. Что надо сделать, чтобы прочитать не пустую строку, а введенный текст?

"Обходной маневр" в виде принудительной программной смены фокуса типа ui->ledBName->setFocus(); не дал ничего.

Вид окна с комбобоксом:


Если в ситуации, показанной на рисунке, нажать клавишу Enter, то чтение строки из комбобокса в слоте accept()
Код:
QString settl = ui->cbSettl->currentText().trimmed();
даст пустую строку, хотя там явно есть текст Улыбающийся
Записан
_govorilka
Гость
« Ответ #1 : Май 08, 2010, 18:10 »

Попробуй считывать текст вот так:
Код:
comboBox->lineEdit()->text();

Записан
radislav72
Гость
« Ответ #2 : Май 08, 2010, 18:28 »

Код:
comboBox->lineEdit()->text();

Такое тоже пробовал- результат одинаковый Грустный
Записан
radislav72
Гость
« Ответ #3 : Май 10, 2010, 08:23 »

Ух, кажется разобрался Улыбающийся
Вроде-бы дело в том, что при редактировании текста в комбобоксе в режиме autocomplete нажатие Enter должно "фиксировать" введенный текст. Вместе с тем, нажатие Enter вызывает accept диалога. И accept срабатывает ДО того, как "зафиксируется" текст в комбобоксе.

По крайней мере, чтение текста из комбобокса в eventFilter, настроенном на QEvent::KeyPress (и key() == Qt::Key_Return), дало нужный результат.
Записан
mal
Гость
« Ответ #4 : Май 11, 2010, 07:28 »

ничто не мешает ввести функцию возврата данных из диалога, которая будет возвращать содержимое комбобокса наружу, после отработки accept :
Код:
...
CDialog:: public QDialog
{
public
...
QString get_combo_val();
...
}
..........
CDialog *p_dlg;
p_dlg = new...
int ret = p_dlg->exec()
if(ret == QDialog::Accepted)
{
QString str = p_dlg->get_combo_val();
}
delete p_dlg;
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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