• 5857阅读
  • 1回复

继承自QWidget的自定义控件,不能响应Keyboard和Mouse事件,但能响应Paint,Wheel事件 [复制链接]

上一主题 下一主题
离线zyfu0000
 
只看楼主 倒序阅读 楼主  发表于: 2010-12-27
关键词: keyeventmouseevent
继承自QWidget的自定义控件,不能响应Keyboard和Mouse事件,但能响应Paint,Wheel事件,这是为什么?
但通过grabKeyboard()和grabMouse()可以响应之,这好奇怪啊!
  1. class MyWidget:public QWidget
  2. {
  3. Q_OBJECT
  4. protected:
  5.     virtual void resizeEvent(QResizeEvent* evt);
  6.     virtual void paintEvent(QPaintEvent* evt);
  7.     virtual void keyPressEvent(QKeyEvent* evt);
  8.     virtual void keyReleaseEvent(QKeyEvent* evt);
  9.     virtual void mousePressEvent(QMouseEvent* evt);
  10.     virtual void mouseReleaseEvent(QMouseEvent* evt);
  11.     virtual void mouseMoveEvent(QMouseEvent* evt);
  12.     virtual void wheelEvent(QWheelEvent* evt);

  1. class MainWindow:public QMainWindow,public Ui::MainWindowClass
  2. {
  3. Q_OBJECT
  4. public:
  5.     OgreMeshViewer(QWidget *parent = 0, Qt::WFlags flags = 0);
  6.     ~OgreMeshViewer();
  7.     void addQtOgreWidget()
  8.                       {
  9.                           mWidget=new MyWidget(Ui::MainWindowClass::centralWidget);
  10.          verticalLayout->addWidget(mWidget1);
  11.                       }
  12. private:
  13.     MyWidget *mWidget;
  14. };
[ 此帖被zyfu0000在2010-12-27 22:26重新编辑 ]
离线zyfu0000
只看该作者 1楼 发表于: 2010-12-28
在MyWidget类中定义了EventFilter,发现根本就没有Key和mouse的事件,难道是被父窗口给截获了?或者怎么地?求解决啊!
bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
     if (event->type() == QEvent::KeyPress)
     {
         QMessageBox::warning(this,"gg","gg");
         return true;
     }
     else if (event->type()==QEvent::MouseButtonPress)
     {
         QMessageBox::warning(this,"gg","gg");
         return true;
     }
     else if (event->type()==QEvent::Wheel)
     {
         QMessageBox::warning(this,"gg","gg");
         return true;
     }
     else
     {
         // standard event processing
         return QObject::eventFilter(obj, event);
     }
快速回复
限100 字节
 
上一个 下一个