crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 18.4.2024, 6:59