• 877阅读
  • 5回复

求教,Qt怎么模拟一个鼠标点击事件? [复制链接]

上一主题 下一主题
离线amuuncle
 

只看楼主 倒序阅读 楼主  发表于: 2022-12-12
各位大神,
          请教一个问题,Qt怎么可以模拟一个指定位置,但是不指定窗口对象的鼠标点击事件
就是说,我想要在界面某一点触发一个鼠标点击,但是2我不知道这个点是否有别的弹窗,也不知道这个点有没有按钮之类的,就是单纯的类似模拟一个真实的鼠标点击事件,这个靠Qt能实现吗?最好不使用操作系统api,因为要跨平台。

比如说下面窗口,我想在按钮的位置(100, 60)位置触发点击事件,但是sendEvent的窗口填它的父窗口,就无法触发点击事件




QApplication::sendEvent(g_wDrawWnd, releaseEvent);这种都必须指定窗口,如果窗口上这个鼠标事件的点上有个按钮,同样也不会触发这个按钮的点击事件,这个有点坑啊,不知道怎么破。。。
求大神指点。
离线zy1233

只看该作者 1楼 发表于: 2022-12-12
QApplication::sendEvent(g_wDrawWnd, releaseEvent);这种都必须指定窗口,如果窗口上这个鼠标事件的点上有个按钮,同样也不会触发这个按钮的点击事件,这个有点坑啊,不知道怎么破。。。

mousePress
mouseRelease
离线20091001753

只看该作者 2楼 发表于: 2022-12-13
1,程序给自己的控件模拟点击事件,以及程序其他程序模拟鼠标点击事件,在实现的时候方式有很大区别。
例如你自己的程序是 Qt 写的,但别人的程序不一定是 Qt 写的。但你并没有介绍清楚这一点(点自己,或点别人)。

2,模拟鼠标点击事件,有3个程度:程序级、系统级、驱动级。
有些游戏,采用的是DirectX技术,因为游戏对操作响应特别高,所以是驱动级。
若游戏只处理驱动级的鼠键交互,要么程序级与系统级的模拟对它是毫无效果的。
采用驱动级鼠键交互响应的,既不局限于 DirectX,也不局限于游戏应用。

3,没有一个鼠键交互方式能通吃所有情况,通吃所有应用。
一般鼠键交互的方式都是针对不同应用,代码也会有所不同。
举个例子,鼠标按下并弹起,中间间隔多少秒,不同的程序的参数也会差距很大。
通常你会希望间隔越小越好,实现几个复杂的步骤瞬间完成,但太小了又会导致模拟失败。


(づ ̄ 3 ̄)づ
离线amuuncle

只看该作者 3楼 发表于: 2022-12-13
回 20091001753 的帖子
20091001753:1,程序给自己的控件模拟点击事件,以及程序其他程序模拟鼠标点击事件,在实现的时候方式有很大区别。
例如你自己的程序是 Qt 写的,但别人的程序不一定是 Qt 写的。但你并没有介绍清楚这一点(点自己,或点别人)。
2,模拟鼠标点击事件,有3个程度:程序级、系统级、驱动级。
.. (2022-12-13 00:17) 

谢谢大佬指点
离线amuuncle

只看该作者 4楼 发表于: 2022-12-13
之前可能没说清楚。我再简单描述一下我的场景啊
- 我用Qt开发一个嵌入式的gui
- 这个Qt程序监听一个tcp端口接收消息
- 一个远程的程序,简称远程鼠标吧,这个远程鼠标连接上Qt程序
- 远程程序会发送消息,告诉Qt程序在那个点点击一下,比如(100,100)
- Qt收到这个消息后就在(100,100)这个点触发一个鼠标点击事件,但是不用关心此点是否存在按钮或者是否能够点击等等,就类似于真实鼠标点击,QApplication::sendEvent(g_wDrawWnd, releaseEvent);又必须选择指定控件

不确定这个单纯靠Qt是否能满足
离线20091001753

只看该作者 5楼 发表于: 2022-12-13
这个和 Qt 没有关系,而是要看窗口平台的 api 能否满足。

因为对方的程序不一定是 qt 写的,所以你对其他程序模拟鼠键操作,只能通过平台 api

win系统是可以的,但你是嵌入式系统,这就五花八门了。
(づ ̄ 3 ̄)づ
快速回复
限100 字节
 
上一个 下一个