如何正确读取触摸事件并在QWidget Qt上获得位置
How to properly read touch events and get position on a QWidget Qt
我正试图在qt中为android应用程序开发游戏控制器,但遇到了一些问题。当我只使用QMouseEvents而不是QTouchEvents时,控制器工作得很好,但问题是它不支持多个接触点。对于触摸事件,似乎没有QWidget::mousePressEvent的等效项。有人告诉我使用QWidget::event。
bool GameController::event(QEvent* event)
{
switch(event->type())
{
case QEvent::TouchBegin:
//Do something...
break;
case QEvent::TouchEnd:
//Do something else...
break;
case QEvent::TouchUpdate:
//Do something else...
break;
}
return QWidget::event(event);
}
问题是我无法使用event->touchPoints((来获取触摸的位置,因为它不知道这是一个触摸事件。如何正确读取触摸事件?
编译器可能不知道这是一个触摸事件,但只要您知道,您就可以向下转换:
case QEvent::TouchBegin:
{
QTouchEvent * te = static_cast<QTouchEvent *>(event);
// now you can call te->touchPoints(), etc here
}
请注意,如果event
实际上没有指向QTouchEvent
(或其子类(,则上面的代码将调用未定义的行为,因此只有当您可以100%保证event
实际上是QTouchEvent(在这种情况下可以是AFAIK(时,才使用static_cast
。
对于不能保证下变频有效的情况,可以使用dynamic_cast
,它足够聪明,可以检查指向的对象,如果下变频到该类型实际上无效,则返回NULL
:
case QEvent::TouchBegin:
{
QTouchEvent * te = dynamic_cast<QTouchEvent *>(event);
if (te)
{
// now you can call te->touchPoints(), etc here
}
}
当然,运行时检查需要花费一些CPU周期,所以除非需要,否则不要使用dynamic_cast
QWidget
(例如QWidget::showEvent(QShowEvent*)
、QWidget::hideEvent(QHideEvent*)
(的各种类型事件的所有受保护函数/事件处理程序都是通用QWidget::event()
方法的专门化,以方便您使用。
CCD_ 12本身是通过CCD_ 13虚拟方法实现的。你可以在这里阅读更多信息-https://doc.qt.io/qt-5/qobject.html#eventFilter.通过bool eventFilter(QObject *obj, QEvent *ev) override
的帮助,您可以通过使用QObject::installEventFilter((获得关于发送到QObect
以及其他对象的所有QEvents
的通知。
在QObject::eventFilter()
实现的主体中,您检查事件的类型及其接收器,然后按照@Jeremy Friesner的描述执行static_cast
或dynamic_cast
,以访问特定于该事件的方法。如果您希望您的子类QObject
在发生事件时发出信号,那么使用这种强大的机制,您可以实现自己的专用事件函数以及自定义信号。
- 在小部件上获得绝对的鼠标点击位置(放大时也是如此)Qt
- QT:即使在static_cast后也无法在主窗口中设置对象的位置
- 恢复Qt窗口大小和位置问题
- 指定Qt查找OpenSSL DLL的位置
- QT 无法识别 UTF-8 编码,适用于其他所有位置
- 在qt中更改show()上的窗口位置
- 在屏幕上的确切位置保存和恢复Qt小部件
- 设置位置时QT删除对象()
- qt如何连接QPushButton的2D数组并返回位置
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 将文件从资产复制到永久位置Qt + Android
- Qt从C++控制OSM位置
- 如何始终获得QT鼠标位置
- QT QgraphicView和Qgraphicscene鼠标位置
- QT:QGraphicsScene鼠标位置始终(0,0)
- Qt:交换QGraphicsRectItem位置的最佳方法是什么
- Qt with Lua |放置 lua 文件的位置
- Qt - 如何获取 QGraphicsItem 相对于场景的位置
- QT:如何使Qwidget出现在我的MainWindow上的多个位置
- QT位置类别