Как добавить QMouseEvent в EventFilter?

Я добавил EventFilter в QCompleter, потому что у меня была та же проблема, что и этот человек.

Теперь я хочу добавить событие левой кнопки мыши, если элемент щелкается из PopupCompletion.
Я пытался, но понятия не имею, нахожусь ли я на правильном пути, потому что я новичок в Qt.

eventfilter.h

class EventFilter : public QObject
{
Q_OBJECT
public:
EventFilter(QLineEdit* lineEdit, QObject* parent = NULL)
:QObject(parent)
,mLineEdit(lineEdit)
{ }
virtual ~EventFilter()
{ }

bool eventFilter(QObject* watched, QEvent* event);

private:
QLineEdit* mLineEdit;
};

eventfilter.cpp

#include "eventfilter.h"
bool EventFilter::eventFilter(QObject* watched, QEvent* event)
{
QAbstractItemView* view = qobject_cast<QAbstractItemView*>(watched);
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Return ||
keyEvent->key() == Qt::Key_Enter ||
keyEvent->key() == Qt::Key_Tab)
{
mLineEdit->clear();
mLineEdit->setFocus();
view->hide();
return true;
}
}
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
mLineEdit->clear();
mLineEdit->setFocus();
view->hide();
return true;
}
}
return false;
}

mainwindow.h

#include "eventfilter.h"
class QCompleter;
class QLabel;
class QLineEdit;
class QWidget;

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);

private:
void createMenu();
QAbstractItemModel *modelFromFile(const QString& fileName);

QCompleter *completer;
QLabel *contentsLabel;
QLineEdit *lineEdit;
QWidget *widgetBox;
};

mainwindow.cpp

#include "mainwindow.h"
completer = new QCompleter(this);
completer->setModel(modelFromFile(":/resources/wordlist.txt"));
completer->setModelSorting(QCompleter::CaseInsensitivelySortedModel);
lineEdit->setCompleter(completer);
EventFilter *filter = new EventFilter(lineEdit);
completer->popup()->installEventFilter(filter);

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]