事件过滤器

来源:互联网 发布:马鞍山电视网络大学 编辑:程序博客网 时间:2024/06/03 05:40

dialog.h

#include <QDialog>namespace Ui {class Dialog;}class Dialog : public QDialog{    Q_OBJECTpublic:    explicit Dialog(QWidget *parent = 0);    ~Dialog();protected:    bool eventFilter(QObject *obj, QEvent *event);private:    Ui::Dialog *ui;};

dialog.cpp

#include "dialog.h"#include "ui_dialog.h"#include <QKeyEvent>#include <QDateTime>#pragma execution_character_set("utf-8")Dialog::Dialog(QWidget *parent) :    QDialog(parent),    ui(new Ui::Dialog){    ui->setupUi(this);    ui->recordName->setFocus();    // 安装事件过滤器    ui->recordName->installEventFilter(this);    ui->archiveCheckComboBox->installEventFilter(this);    ui->remarks->installEventFilter(this);    ui->createNewTraceBtn->installEventFilter(this);    ui->coverOldTraceBtn->installEventFilter(this);    ui->cancle->installEventFilter(this);}Dialog::~Dialog(){    delete ui;}bool Dialog::eventFilter(QObject *obj, QEvent *event){    if( obj == ui->recordName || obj == ui->archiveCheckComboBox || obj == ui->remarks            || obj == ui->createNewTraceBtn || obj == ui->coverOldTraceBtn || obj == ui->cancle )    {        if( event->type() == QEvent::KeyPress )        {            //将事件转化为键盘事件            QKeyEvent *key_event = static_cast< QKeyEvent* >( event );            //按下回车键执行焦点切换事件            if( key_event->key() == Qt::Key_Return )            {                bool recordName_focus           = ui->recordName->hasFocus();                bool archiveCheckComboBox_focus = ui->archiveCheckComboBox->hasFocus();                bool remarks_focus              = ui->remarks->hasFocus();                bool createNewTraceBtn_focus    = ui->createNewTraceBtn->hasFocus();                bool coverOldTraceBtn_focus     = ui->coverOldTraceBtn->hasFocus();                bool cancle_focus               = ui->cancle->hasFocus();                if( recordName_focus )                {                    focusNextChild();                    ui->archiveCheckComboBox->setFocus();                }                else if( archiveCheckComboBox_focus )                {                    focusNextChild();                    ui->remarks->setFocus();                }                else if( remarks_focus )                {                    focusNextChild();                    ui->createNewTraceBtn->setFocus();                }                else if( createNewTraceBtn_focus )                {                    focusNextChild();                    ui->coverOldTraceBtn->setFocus();                }                else if( coverOldTraceBtn_focus )                {                    focusNextChild();                    ui->cancle->setFocus();                }                else if( cancle_focus )                {                    focusNextChild();                    ui->recordName->setFocus();                }                else                {                    focusNextChild();                }                return true;            }        }    }    return QDialog::eventFilter( obj, event );}