これが私がやった方法です。eventFilter(QObject*,QEvent*);
まず、Mainwindow (私のフォーム) のヘッダーに追加し、次にその cpp ファイル内でそのメソッドを定義する必要がありました。
最後に、フィルターをコンストラクターにインストールします。以下のコードは、私のフォーム コンテンツ (MainWindow.h と MainWindo.cpp) を表しています。
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
bool eventFilter( QObject* sender, QEvent* event);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include <QKeyEvent> //dont forget to add this
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->installEventFilter(this); //installing the eventfilter for lineEdit
}
bool MainWindow::eventFilter(QObject *sender, QEvent *event)
{
if (sender == ui->lineEdit)
{
if(event->type()== QEvent::KeyPress)
{
QKeyEvent * keyEvent = (QKeyEvent*)(event);
if( keyEvent->key() == Qt::Key_Control)
{
QMessageBox::information(this,"Salam ","Control Key was ressed");
return true;
}else
{
return false;
}
}
}
return QWidget::eventFilter(sender,event);
}
MainWindow::~MainWindow()
{
delete ui;
}