From c5a0c4e0d7f69be9341cc5c8815afe9761e5c47c Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 16 Jul 2013 15:31:44 -0300 Subject: Support for key_up and down in the combobox delegate. Adds spport for key_up and key_down in the combobox delegates, now when you press key_up or down, it will show the list of choices instead of going one-by-one in the lineedit. Signed-off-by: Tomaz Canabrava --- qt-ui/modeldelegates.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'qt-ui/modeldelegates.cpp') diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp index 3aeaa02b5..28a6689b8 100644 --- a/qt-ui/modeldelegates.cpp +++ b/qt-ui/modeldelegates.cpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include StarWidgetsDelegate::StarWidgetsDelegate(QWidget* parent): QStyledItemDelegate(parent), @@ -65,6 +67,7 @@ void ComboBoxDelegate::setEditorData(QWidget* editor, const QModelIndex& index) c->setEditText(data); } +QComboBox *comboEditor; QWidget* ComboBoxDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const { QComboBox *comboDelegate = new QComboBox(parent); @@ -73,9 +76,26 @@ QWidget* ComboBoxDelegate::createEditor(QWidget* parent, const QStyleOptionViewI comboDelegate->setAutoCompletion(true); comboDelegate->setAutoCompletionCaseSensitivity(Qt::CaseInsensitive); comboDelegate->completer()->setCompletionMode(QCompleter::PopupCompletion); + comboDelegate->lineEdit()->installEventFilter( const_cast(qobject_cast(this))); + comboEditor = comboDelegate; return comboDelegate; } +bool ComboBoxDelegate::eventFilter(QObject* object, QEvent* event) +{ + // Reacts on Key_UP and Key_DOWN to show the QComboBox - list of choices. + if (event->type() == QEvent::KeyPress){ + QKeyEvent *ev = static_cast(event); + if(ev->key() == Qt::Key_Up || ev->key() == Qt::Key_Down){ + QString curr = comboEditor->currentText(); + comboEditor->showPopup(); + return true; + } + } + + return QStyledItemDelegate::eventFilter(object, event); +} + void ComboBoxDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const { QRect defaultRect = option.rect; -- cgit v1.2.3-70-g09d2