Однако ничего не происходит. У меня подозрение, что событие обрабатывает не мой класс, а сам QLineEdit или кто-то из предков.
Выкурил кучу манов и перепробовал тонну способов это обойти, но ничего хорошего так и не получилось.
Для примера сварганил небольшой тестовый класс.
test.h
Код:
#ifndef TEST_H
#define TEST_H
#include <QWidget>
class QLineEdit;
class QHBoxLayout;
class Test : public QWidget{
Q_OBJECT;
public:
Test();
private:
QHBoxLayout *layout;
QLineEdit *lineEdit;
protected:
void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event);
};
#endif // TEST_H
test.cpp
Код:
#include <QtGui>
#include "test.h"
Test::Test(){
lineEdit = new QLineEdit;
layout = new QHBoxLayout;
layout ->addWidget(lineEdit);
setLayout(layout);
}
void Test::keyPressEvent(QKeyEvent *event){
switch (event->key()) {
case Qt::Key_Enter:
lineEdit->setText("Enter Pressed");
break;
case Qt::Key_Space:
lineEdit->setText("Space Pressed");
break;
default:
QWidget::keyPressEvent(event);
}
}
void Test::mousePressEvent(QMouseEvent *event) {
switch (event->button()) {
case Qt::LeftButton:
lineEdit->setText("Left Mouse Button Pressed");
break;
case Qt::RightButton:
lineEdit->setText("Right Mouse Button Pressed");
break;
case Qt::MidButton:
lineEdit->setText("Middle Mouse Button Pressed");
break;
default:
QWidget::mousePressEvent(event);
}
}
main.cpp
Код:
#include <QApplication>
#include "test.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Test w;
w.show();
return a.exec();
}
Клики мышкой по окну работают, а внутки QLineEdit ничего не работает.
Пробовал eventFilter повесить:
test.cpp
Код:
#include <QtGui>
#include "test.h"
Test::Test(){
lineEdit = new QLineEdit;
layout = new QHBoxLayout;
layout ->addWidget(lineEdit);
setLayout(layout);
installEventFilter(this);
}
bool Test::eventFilter(QObject *, QEvent *event) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Enter) {
lineEdit->setText("Enter Pressed");
return true;
} else
return false;
}
return false;
}
void Test::keyPressEvent(QKeyEvent *event){
switch (event->key()) {
case Qt::Key_Enter:
lineEdit->setText("Enter Pressed");
break;
case Qt::Key_Space:
lineEdit->setText("Space Pressed");
break;
default:
QWidget::keyPressEvent(event);
}
}
void Test::mousePressEvent(QMouseEvent *event) {
switch (event->button()) {
case Qt::LeftButton:
lineEdit->setText("Left Mouse Button Pressed");
break;
case Qt::RightButton:
lineEdit->setText("Right Mouse Button Pressed");
break;
case Qt::MidButton:
lineEdit->setText("Middle Mouse Button Pressed");
break;
default:
QWidget::mousePressEvent(event);
}
}
Так же ноль эффекта.
В общем что-то я не догоню этот процесс. Объясните, пожалуйста, что не так.