2

デザイナーに配置したウィジェットのイベントをオーバーライドする方法はありますか?

Qt でイベントを使用する方法を示すチュートリアルを見たことがありますが、それらはすべてコーダーにウィジェットをゼロから作成するように強制します (ウィジェットからそれらを継承することにより、イベントを関連付けてから、そのウィジェットをプログラムでフォームに追加します)。 QtCreatorデザイナーを使用していますこれらの例は役に立ちません。

Qt でフォームの特定のウィジェットの特定のイベントをオーバーライドするにはどうすればよいですか?

4

2 に答える 2

2

イベント フィルタを使用して実行できます。

于 2013-07-12T16:09:12.213 に答える
0

これが私がやった方法です。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;
}
于 2013-07-12T20:18:43.003 に答える