QT全局鼠标侦听器

QT全局鼠标侦听器,qt,mouseevent,mouse-hook,Qt,Mouseevent,Mouse Hook,我是来自Java的新手。有没有这样的东西: QT?我可以用坐标获得所有鼠标事件吗?我已经做了以下工作: bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);

我是来自Java的新手。有没有这样的东西: QT?我可以用坐标获得所有鼠标事件吗?我已经做了以下工作:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::MouseButtonRelease)
    {
      QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
      ui->listWidget->addItem(QString("Mouse pressed: %1,%2").arg(mouseEvent>pos().x()).arg(mouseEvent->pos().y()));
    }
  return false;
}
bool主窗口::事件过滤器(QObject*obj,QEvent*event)
{
如果(事件->类型()==QEvent::MouseButtonRelease)
{
QMouseEvent*mouseeEvent=静态_转换(事件);
ui->listWidget->addItem(QString(“鼠标按下:%1,%2”).arg(mouseEvent>pos().x()).arg(mouseEvent->pos().y());
}
返回false;
}
这很好,但它只在我的应用程序中运行,而不是在系统范围内运行。 我该怎么做才能让它在QT中工作?
而且这只需要在windows上运行…

实际上非常简单。我没有找到任何例子或任何东西

然后我在YouTube上找到了一个视频,显示了我正在搜索的内容(键盘,但鼠标基本相同)

所以,如果有人需要这个,你就走吧:

#include <Windows.h>
#pragma comment(lib, "user32.lib")
HHOOK hHook = NULL;
using namespace std;

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {   
    switch( wParam )
    {
      case WM_LBUTTONDOWN:  qDebug() << "Left click"; // Left click
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
if (hHook == NULL) {
    qDebug() << "Hook failed";
}
ui->setupUi(this);
}
#包括
#pragma注释(lib,“user32.lib”)
HHOOK HHOOK=NULL;
使用名称空间std;
LRESULT回调MouseProc(int-nCode,WPARAM-WPARAM,LPARAM-LPARAM){
交换机(wParam)
{

案例WM_LBUTTONDOWN:qDebug()在一个(可见)小部件上应该可以工作,这在系统范围内可以工作吗?在mac cocoa上不行,但在其他方面,它只会用这个:ui->listWidget->grabMouse();但它只是锁定了我的窗口,没有捕获任何内容……您将自己的答案标记为“已接受”,但答案并不能回答你自己的问题。你的问题是关于使用Qt的全局鼠标挂钩。你的答案是关于使用Win32(一种完全不同的技术)的全局鼠标挂钩。这非常有用!你还有YouTube链接吗?@JakeW抱歉,忘了添加链接……好了。。。