QT/c++ 如何检查全局是鼠标按下还是释放?

QT/c++ How to check globaly is mouse press or release?

本文关键字:鼠标 释放 全局 c++ 何检查 检查 QT      更新时间:2023-10-16
void MainWindow::mousePressEvent(QMouseEvent* event)
{
if(event->button() == Qt::LeftButton)
{
timer->start(timer_time);
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent* event)
{
if(event->button() == Qt::LeftButton)
{
timer->stop();
}
}

当我在应用程序内使用它时,此代码有效,但如果我想在外部使用它,它将不起作用。我该怎么做? 它应该在按下左按钮时启动计时器,并在左按钮释放时停止。


解决方案:了解低级鼠标和键盘钩子 win32


听起来钩子是你正在寻找的。

基本上,钩子允许您与系统内的活动进行交互,并且可以使用更改其行为。

代码中的事件侦听器将仅捕获操作系统委托给 QT 应用程序的鼠标事件。这就是为什么您的代码仅在应用程序中使用它时才有效。使用挂钩,您可以在系统级别拦截鼠标事件,并让它们在您的应用程序中处理它们,而不是让操作系统决定应该在哪里处理它们。

以下是用于设置它们的方法,下面是有关实现细节的小指南。