crossplatform.ru

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


  Ответ в Проблема с QComboBox
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
asvil Дата 8.6.2010, 0:22
  При нажатии enter в редактируемом комбобоксе, он пытается сделать подобное QComboBox::model()::index(QComboBox::insertPolicy, QComboBox::modelColumn()).setData(QComboBox::lineEdit().text()).
Если установлена модель которая не умеет добавлять записи, то незачем делать QComboBox редактируемым.
Litkevich Yuriy Дата 5.6.2010, 15:01
  кнопка "Ввод" в представлении имеет особый смысл - начать/завершить редактирование
inviZ Дата 5.6.2010, 13:12
  Хм, верно, небольшое уточнение есть - подобное странное поведение наблюдается, когда элементы ComboBox'а берутся из модели (QSqlQueryModel, но я думаю, это неважно).
Litkevich Yuriy Дата 5.6.2010, 11:39
 
Цитата(inviZ @ 5.6.2010, 15:04) *
Почему-то при нажатии на Enter его текст очищается
никогда такого не замечал
inviZ Дата 5.6.2010, 11:04
  Собственно, вот в чем проблема. Имеется редактируемый QComboBox. Почему-то при нажатии на Enter его текст очищается.
Что очень нежелательно, т.к. Enter призван вызывать нажатие на default button диалога. И собственно, если фокус при этом находится на комбобоксе, произойдет совершенно ненужная в данном случае очистка. Как запретить подобное поведение? Желательно без наследования. Ради таких мелочей лишние классы плодить не хочется.
Пробовал через installEventFilter - событие-то отфильтровываю, но при этом default button также не нажимается, сделал пока такой грязный хак:

    bool ComboBoxEventFilter::eventFilter(QObject *obj, QEvent *event)
    {
        if (event->type() == QEvent::KeyPress) 
        {
            QKeyEvent* keyEvent = static_cast<QKeyEvent *>(event);
            
            int key = keyEvent->key();
            if (key == Qt::Key_Return || key == Qt::Key_Enter)
            {
                QDialog* d = static_cast<QDialog *>(obj->parent());
                d->accept();
                return true;
            }
        }

        return QObject::eventFilter(obj, event);
    }

Работает, но на то он и грязный хак... Может есть более правильное решение?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 4:07