如题,我想捕捉任意一点的鼠标坐标和鼠标事件,但是鼠标一移出widget的外面mouseMoveEvent等事件就无效了。
程序主要代码如下:
ps:在Qt api中说使用QAbstractEventDispatcher能接收到系统的消息,但我测试了下,也只限于鼠标出现在widget内。
main.cpp:
- C/C++ code
bool myEventFilter(void *msg){ LPMSG lpmsg = (LPMSG)msg; qDebug()<<lpmsg->message; return false;}int main(int argc, char *argv[]){ QApplication a(argc, argv); CursorTest w; w.show(); QAbstractEventDispatcher *ap = QAbstractEventDispatcher::instance(); ap->setEventFilter(myEventFilter); return a.exec();}
cursortest.cpp:
CursorTest::CursorTest(QWidget *parent)
: QWidget(parent)
{
setMouseTracking( true );
}
CursorTest::~CursorTest()
{
}
void CursorTest::mouseMoveEvent(QMouseEvent *e){
qDebug()<<e->globalPos();
}
该如何做才能捕捉到widget外的鼠标事件?
------解决方案--------------------
焦点不在widget,事件根本不会发送给widget。
甚至app都不会收到。因为那可能是给系统/桌面/其他app的。。
可能要用系统API捕获了。
------解决方案--------------------
void QWidget::grabMouse ()
捕获鼠标,其它程序不能接收鼠标事件。
------解决方案--------------------
可能楼主是想达到hook的那种效果,关注一下。
------解决方案--------------------
把窗口的属性设为Qt::Popup,鼠标移出窗体时但是窗体依然能捕获到鼠标消息
------解决方案--------------------
调用WINDOW函数吧,QT本人身是做不到的