【问题标题】:QT/c++ How to check globaly is mouse press or release?QT/c++ 如何检查全局是鼠标按下还是释放?
【发布时间】:2017-07-13 17:16:50
【问题描述】:
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();
    }
}

当我在我的应用程序中使用它时,此代码有效,但如果我想在外部使用它,它将无法工作。我怎样才能做到这一点? 它应该在按下 LeftButton 时启动计时器,并在 LeftButton 释放时停止。


解决方案: understanding-the-low-level-mouse-and-keyboard-hook-win32


【问题讨论】:

  • “但是如果我想在外面使用” 请详细说明,在外面使用是什么意思?
  • @Damian Sośnicki 你想从你的应用程序中获取鼠标事件吗?
  • 是的,我想要它。我得到它。现在我有另一个问题。我在 MatTheWhale 的回答的评论中描述了它。

标签: c++ qt events mouse


【解决方案1】:

听起来hooks 就是您要找的东西。

基本上,钩子可以让您与系统中的活动进行交互,并且可以用来改变其行为。

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

Here 是用来设置它们的,here 是关于实现细节的小指南。

【讨论】:

  • 好吧,我明白了,但是现在:我可以删除这个钩子吗?如果我的 chechbox 是 chech 我想捕获鼠标,但如果未选中我想将其关闭。
  • 当然,还有另一个名为UnhookWindowsHookEx 的函数正是这样做的。应该可以从我提供的 MSDN 链接访问该功能的文档。但是请记住,我个人遇到过这样的问题,即在 CPU 使用率极高的状态下,钩子会突然而无声地脱钩。如果您遇到钩子随机停止工作的错误,请记住一些事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多