Yes, please see below my detail wants: after user selected the comboBox, he can use Key_Alt to popup the item list view. and then he can use the left/right arrow key to select the item in the list, then use Key_Alt key to confirm the selected item and close the item list view. I have implement the below code, but seem the even filter for QComboBox's view() doesn't work.
#include "combobox.h"
#include <QEvent>
#include <QKeyEvent>
#include <QAbstractItemView>
#include <QDebug>
ComboBox
::ComboBox(QWidget *parent
) :{
view()->installEventFilter(this);
}
{
if (e->key() == Qt::Key_Space) return;
int key = Qt::Key_unknown;
if (e->key() == Qt::Key_Alt || e->key() == Qt::Key_Meta) key = Qt::Key_Space;
if (key
== Qt
::Key_unknown) QComboBox::keyPressEvent(e
);
else
{
}
}
{
if(e
->type
() == QEvent::KeyPress) {
QKeyEvent *keyEvent
= static_cast<QKeyEvent
*>
(e
);
int key = keyEvent->key();
qDebug("Key = %x", key);
int key_map = Qt::Key_unknown;
{
switch(key)
{
case Qt::Key_Left:
key_map = Qt::Key_Up;
break;
case Qt::Key_Right:
key_map = Qt::Key_Down;
break;
case Qt::Key_Alt:
case Qt::Key_Meta:
break;
case Qt::Key_Space:
break;
}
}
if (key_map != Qt::Key_unknown)
{
}
}
}
#include "combobox.h"
#include <QEvent>
#include <QKeyEvent>
#include <QAbstractItemView>
#include <QDebug>
ComboBox::ComboBox(QWidget *parent) :
QComboBox(parent)
{
view()->installEventFilter(this);
}
void ComboBox::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Space) return;
int key = Qt::Key_unknown;
if (e->key() == Qt::Key_Alt || e->key() == Qt::Key_Meta) key = Qt::Key_Space;
if (key == Qt::Key_unknown) QComboBox::keyPressEvent(e);
else
{
QKeyEvent myEvent(QEvent::KeyPress, key, Qt::NoModifier);
QComboBox::keyPressEvent(&myEvent);
}
}
bool ComboBox::eventFilter(QObject *t, QEvent *e)
{
if(e->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(e);
int key = keyEvent->key();
qDebug("Key = %x", key);
int key_map = Qt::Key_unknown;
if (t == (QObject *)view())
{
switch(key)
{
case Qt::Key_Left:
key_map = Qt::Key_Up;
break;
case Qt::Key_Right:
key_map = Qt::Key_Down;
break;
case Qt::Key_Alt:
case Qt::Key_Meta:
break;
case Qt::Key_Space:
break;
}
}
if (key_map != Qt::Key_unknown)
{
QKeyEvent myEvent(QEvent::KeyPress, key_map, Qt::NoModifier);
return QComboBox::eventFilter(t, &myEvent);
}
}
return QComboBox::eventFilter(t, e);
}
To copy to clipboard, switch view to plain text mode
Bookmarks