当前位置: 代码迷 >> QT开发 >> Qt鼠标事件的有关问题
  详细解决方案

Qt鼠标事件的有关问题

热度:83   发布时间:2016-04-25 04:48:00.0
Qt鼠标事件的问题
我的mainwindow中有三个子窗口tableview、menubar、toolbar和一个成员变量窗口(QGraphicsView,他不能事mainwindow的子窗口,原因就不细说了)。现在我想让鼠标移到成员变量窗口QGraphicsView的时候它就是activateWindow,移到其它地方的时候mainwindow就是activateWindow。于是我用了以下方法:
1,view->setMouseTracking(true);
  this->setMouseTracking(true);
  使可以捕捉未按下键的移动事件
2,重写mainwindow的mousemoveEvent
  里面加上语句:this->activateWindow();
3,安装事件管理器,tableview->installEventFilter(this);
4,重写eventFilter(QObject *target, QEvent *event)函数
  if(target==view)
  if(event->type()==QEvent::MouseMove)
  view->activateWindow();
补充一下:QGraphicsView被我设置成永远在顶层Qt::WindowStaysOnTopHint
意思就是上面说的,代码是从整个程序中抽出与这个问题有关的部分。
遇到的问题是运行效果没想象中的好,偶尔active的关系也会改变,但是规律并不是我想要的那样。是哪里出了问题,该怎么解决呢?是不是跟接收鼠标事件的顺序有关,两个重叠的窗口,一前一后,谁接收事件呢,是active的接收,还是一定是前面的接收?

------解决方案--------------------
两个窗口重叠和谁先接受信号没关系 单纯实现这个功能的话很简单 可以重写leaveEvent( QEvent* ) 和enterEventl( QEvent* )在他们里边设置就可以了
  相关解决方案