如何在qt中获取主窗口的touchevent

san*_*eep 6 c++ qt

我正在写一个手臂板的应用程序。我有一个主窗口,我需要获取单点触摸的触摸坐标。由于缺乏 Qt 知识,我面临着获取触摸事件的问题。

根据 QTouchEvent 类文档,我声明了一个插槽,如下所示。

#include <QTouchEvent>
class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(int x, int y, QWidget *parent = 0);
public slots:
  void touchEvent(QTouchEvent *ev);
};
Run Code Online (Sandbox Code Playgroud)

在 mainwindow.cpp 中我重新定义它,如下所示。FFLabel[1] 已由我声明,我正在编写它以确认是否收到事件。

void MainWindow::touchEvent(QTouchEvent *ev)
{
  ui->FFLabel[1]->setText(QString("Event"));
  switch (ev->type())
  {
    case QEvent::TouchBegin:
    case QEvent::TouchEnd:
    case QEvent::TouchUpdate:
    {

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我无法获取 touchEvent。有人可以帮帮我吗。

我已经验证了 /dev/input/event2 并在那里接收了事件。

小智 3

活动不是老虎机。将其声明为受保护的函数。

 protected:
      void touchEvent(QTouchEvent *ev);
Run Code Online (Sandbox Code Playgroud)

编辑:并且您没有在switch声明中添加任何内容来显示您是否收到该事件。

void MainWindow::touchEvent(QTouchEvent *ev)
{
  switch (ev->type())
  {
    case QEvent::TouchBegin:
        ui->FFLabel[1]->setText("Event began.");
        break;
    case QEvent::TouchEnd:
        ui->FFLabel[1]->setText("Event ended.");
        break;
    case QEvent::TouchUpdate:
    {
        ui->FFLabel[1]->setText("Event updated.");
        break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果它仍然不起作用,则意味着您的主窗口不接受触摸事件。您需要在主窗口的构造函数中执行此操作:

 setAttribute(Qt::WA_AcceptTouchEvents, true);
Run Code Online (Sandbox Code Playgroud)