我正在写一个手臂板的应用程序。我有一个主窗口,我需要获取单点触摸的触摸坐标。由于缺乏 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)