我有一台macOS 10.15.7的Mac。我也有这个触摸屏连接到它:https://www.usa.philips.com/c-p/242B9T_27/monitor-lcd-monitor-with-smoothtouch
我试着从这些家伙那里安装一个通用驱动程序https://www.touch-base.com/(试用版-所以他们不支持。)。
触摸屏工作,但它将屏幕触摸转换为鼠标事件。我使用这个来自Qt的示例项目来验证:https://code.qt.io/cgit/qt/qtbase.git/tree/examples/widgets/touch/fingerpaint?h=6.3
有没有办法让MacOS将鼠标事件转换为触摸事件?如果失败,是否有办法拦截Qt mouseEvents并将它们转换为触摸事件?还是有人认识更好的司机?——我找不到。
自己处理Qt事件并不是一个好主意。它似乎没有为你做触摸事件的原因是因为你必须在Qt应用程序中显式地启用它。
详情请参阅下一页
要接收触摸事件,小部件必须具有Qt::WA_AcceptTouchEvents属性集和图形项需要有
将acceptTouchEvents属性设置为true。
然后,你可以重新实现QObject::event(QEvent *e)。
你可以在这里找到事件类型,你也可以在这里找到要处理的触摸事件类型。
QEvent::TouchBegin触摸屏或序列的开始触控板事件(QTouchEvent).
QEvent::TouchCancel取消触摸事件序列(QTouchEvent).
QEvent::TouchEnd触摸事件序列(QTouchEvent)的结束。
QEvent::TouchUpdate触摸屏事件(QTouchEvent).
那么,为了把这些都付诸实践,你可以这样写:
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
...
setAttribute(Qt::WA_AcceptTouchEvents);
...
}
或者只是在类定义之外:
myWidget->setAttribute(Qt::WA_AcceptTouchEvents);
然后你实际处理触摸事件:
bool MyWidget::event(QEvent* event)
{
switch (event->type()) {
case QEvent::TouchUpdate:
// Handle
break;
default:
break;
}
return QObject::event(event);
}