qt屏蔽事件的方法

1.通过重写控件

# // CustomButton
# ...
 protected:
     void mousePressEvent(QMouseEvent *event);
# ...
#

# // ---------- custombutton.cpp ---------- //
# ...
 void ustomButton::mousePressEvent(QMouseEvent *event)
 {
     if (event->button() == Qt::LeftButton) {
         qDebug() << "left";
     } else {
         QPushButton::mousePressEvent(event);
     }
 }


2.事件过滤器


   class MainWindow : public QMainWindow
   {
   public:
        MainWindow();
   protected:
        bool eventFilter(QObject *obj, QEvent *event);
   private:
        QTextEdit *textEdit;
   };
  

   MainWindow::MainWindow()
   {
        textEdit = new QTextEdit;
        setCentralWidget(textEdit);
  

        textEdit->installEventFilter(this);
   }
  

   bool MainWindow::eventFilter(QObject *obj, QEvent *event)
   {
        if (obj == textEdit) {
            if (event->type() == QEvent::KeyPress) {
                QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
                qDebug() << "Ate key press" << keyEvent->key();
                return true;
            } else {
                return false;
            }
        } else {
            // pass the event on to the parent class
            return QMainWindow::eventFilter(obj, event);
        }
   }


测试实例

  class Label : public QWidget
  {
  public:
      Label()
      {
          installEventFilter(this);
      }
 

      bool eventFilter(QObject *watched, QEvent *event)
      {
          if (watched == this) {
              if (event->type() == QEvent::MouseButtonPress) {
                  qDebug() << "eventFilter";
              }
          }
          return false;
      }
 

  protected:
      void mousePressEvent(QMouseEvent *)
      {
          qDebug() << "mousePressEvent";
      }
 

      bool event(QEvent *e)
      {
          if (e->type() == QEvent::MouseButtonPress) {
              qDebug() << "event";
          }
          return QWidget::event(e);
      }
  };
 

  class EventFilter : public QObject
  {
  public:
      EventFilter(QObject *watched, QObject *parent = 0) :
          QObject(parent),
          m_watched(watched)
      {
      }
 

      bool eventFilter(QObject *watched, QEvent *event)
      {
          if (watched == m_watched) {
              if (event->type() == QEvent::MouseButtonPress) {
                  qDebug() << "Application::eventFilter";
               }
          }
           return false;
       }
  

   private:
       QObject *m_watched;
   };
  

   int main(int argc, char *argv[])
   {
       QApplication app(argc, argv);
       Label label;
       app.installEventFilter(new EventFilter(&label, &label));
       label.show();
       return app.exec();
   }

我们可以看到,鼠标点击之后的输出结果是:


QApplication::eventFilter eventFilter event mousePressEvent
http://bbs.qter.org/forum.php?mod=viewthread&tid=629

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值