当前位置: 代码迷 >> QT开发 >> 怎么在widget外(程序外)捕捉鼠标事件
  详细解决方案

怎么在widget外(程序外)捕捉鼠标事件

热度:52   发布时间:2016-04-25 04:41:00.0
如何在widget外(程序外)捕捉鼠标事件?
如题,我想捕捉任意一点的鼠标坐标和鼠标事件,但是鼠标一移出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本人身是做不到的
  相关解决方案