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 <tcanabrava@kde.org>
This commit is contained in:
Tomaz Canabrava 2013-07-16 15:31:44 -03:00
parent ee25edc28e
commit c5a0c4e0d7
2 changed files with 23 additions and 0 deletions

View file

@ -12,6 +12,8 @@
#include <QComboBox>
#include <QCompleter>
#include <QLineEdit>
#include <QKeyEvent>
#include <QAbstractItemView>
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*>(qobject_cast<const QObject*>(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<QKeyEvent*>(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;

View file

@ -2,6 +2,7 @@
#define MODELDELEGATES_H
#include <QStyledItemDelegate>
class QComboBox;
class StarWidgetsDelegate : public QStyledItemDelegate {
Q_OBJECT
@ -20,8 +21,10 @@ public:
virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
virtual void setEditorData(QWidget* editor, const QModelIndex& index) const;
virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const;
virtual bool eventFilter(QObject* object, QEvent* event);
protected:
QAbstractItemModel *model;
QComboBox *comboBox; // warning - it's null everytime a edit's finished.
};
class TankInfoDelegate : public ComboBoxDelegate{