JMouseMonitorThread.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // *****************************************************************************
  2. // 版权所有(C)2023~2099 上海骄成超声波技术有限公司
  3. // 保留所有权利
  4. // *****************************************************************************
  5. // 作者 : 杨坚
  6. // 版本 : 1.0
  7. // 功能说明:
  8. // 鼠标监控-全局的,可能后面还有其他地方使用,所以..
  9. // *****************************************************************************
  10. #include "JMouseMonitorThread.h"
  11. JMouseMonitorThread::JMouseMonitorThread(QObject* parent /*= nullptr*/)
  12. : QThread(parent),
  13. m_locked(false),
  14. m_running(true)
  15. {
  16. }
  17. void JMouseMonitorThread::setLockCenter(const QPoint center)
  18. {
  19. QMutexLocker locker(&m_mutex);
  20. m_lockCenter = center;
  21. m_locked = true;
  22. }
  23. void JMouseMonitorThread::unlock()
  24. {
  25. QMutexLocker locker(&m_mutex);
  26. m_locked = false;
  27. }
  28. void JMouseMonitorThread::stop()
  29. {
  30. m_running = false;
  31. wait();
  32. }
  33. void JMouseMonitorThread::run()
  34. {
  35. QPoint lastPos = QCursor::pos();
  36. while (m_running)
  37. {
  38. if (m_locked)
  39. {
  40. QPoint currentPos;
  41. QPoint center;
  42. {
  43. QMutexLocker locker(&m_mutex);
  44. center = m_lockCenter;
  45. }
  46. currentPos = QCursor::pos();
  47. QPoint delta = currentPos - center;
  48. if (delta != QPoint(0, 0))
  49. {
  50. emit MouseMovedSlg(delta);
  51. emit RequestCursorMoveSlg(center);
  52. }
  53. }
  54. msleep(15);
  55. }
  56. }