如果我在适用于Android MousePressEvent()
和MouseReleaseEvent()
的简单Qt Widget应用程序中实现,那么一切似乎首先都可以正常工作。
如果我更改屏幕的方向(例如,从纵向更改为横向),MousePressEvent
仍会按预期触发,但是MouseReleaseEvent()
会在约1秒钟后自动触发,即使未释放也是如此。
如果我在触摸屏上移动的时间少于第二秒,可以防止这种情况。
有了这种行为,即使我至少更改了屏幕方向一次,就连宾客活动也不再起作用。
我还在调试器中收到以下警告:
libtest5.so:QMetaObject :: invokeMethod:没有此类方法Widget :: inputMethodQuery(Qt :: InputMethodQuery,QVariant)
到目前为止,我在stackoverflow上找不到任何帮助。我在高达5.12的不同Qt版本和不同的Android设备上进行了测试
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
qDebug() << "press" << event->buttons();
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
qDebug() << "release" << event->buttons();
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
qDebug() << "move"<< event->buttons();
}
我希望mouseReleaseEvent
仅在我将手指从屏幕上抬起时触发。同样,只有当我至少改变屏幕方向一次时,这种情况才会发生。
答案 0 :(得分:0)
我的行为完全相同。就我而言,当我从Qt 5.6.3切换到Qt 5.12时发生了错误(这也需要从ndk15c切换到ndk17c,从gcc切换到clang)。
使用QTouchEvent代替QMouseEvent为我解决了问题:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTouchEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setAttribute(Qt::WA_AcceptTouchEvents,true);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::event(QEvent *event)
{
if(event->type() == QEvent::TouchBegin)
{
qDebug() << "press" << event->buttons();
return true;
}
else if (event->type() == QEvent::TouchEnd)
{
qDebug() << "release" << event->buttons();
return true;
}
else if (event->type() == QEvent::TouchUpdate)
{
qDebug() << "move"<< event->buttons();
return true;
}
else
{
return false;
}
}
确保在构造函数中调用setAttribute(Qt::WA_AcceptTouchEvents, true);
。