【发布时间】:2018-08-20 04:44:34
【问题描述】:
我为基于触控的平板电脑开发了一些软件。该装置没有键盘,只有一个触摸屏(触摸屏模拟鼠标)。操作系统是 Windows 10,我们使用 Qt 作为图形用户界面框架。
我们依赖于一个类库点云库,它有一个组件,当我们单击鼠标左键时,该组件需要按下 SHIFT 键才能使某些事情发生。
我需要让底层软件组件相信已按下 SHIFT 键。
我试图通过“Qt 手段”将按键事件发送到 Qt 小部件,但假的 SHIFT 按键似乎没有到达底层 sw。零件。可能是因为它位于与 Qt 无关的类库中,并且该软件类库可能以不同方式检查关键事件(例如通过操作系统调用、c++ std 方式或类似方式)。
在尝试“Qt 方式”时这似乎不起作用:
QKeyEvent key_press(QEvent::KeyPress, Qt::Key_Shift, Qt::ShiftModifier);
QApplication::sendEvent(ui->qvtkWidget, &key_press);
因此,我可能需要使用操作系统方法来伪造 SHIFT 按键。
问题: 如何从 Qt 执行 OS 系统调用或类似操作,以使底层软件组件认为已按下并按住 SHIFT 键(同时用户按下鼠标左键)。
【问题讨论】:
-
也许这可以帮助你:batchloaf.wordpress.com/2012/04/17/…
-
强烈的迹象表明这是XY Problem。请解释点云库的确切作用,当您按住 shift 单击时(以及在哪里)。如果一切都失败了,您是否尝试过发送QMouseEvent?它允许您在单击时发送键盘修饰符。但是,根据库的确定方式,是否按住 [Shift] 键,您可能不走运。尤其是与 Qt 一起使用时,会出现令人麻木的消息处理实现。
-
由于我怀疑按下 shift 键是您的实际目标,而只是达到目的的一种手段,因此更优雅的方法是直接告诉底层软件组件将其行为更改为(无论行为按下shift键时有)。当然,这可能需要对底层软件组件进行修改,如果这不可能,那么您可能会留下黑客(例如假装按下 shift 键)作为您唯一的选择,但这不是最好的方法。
标签: c++ windows qt point-cloud-library