Я разрабатываю приложение на небольшом устройстве Embedded Linux с Qt5.5. Мне нужно иметь возможность изменять координаты нажатия мыши, полученные из Linux ( tslib ), в моем приложении. Я попытался реализовать фильтр событий в своем основном представлении, который изменяет полученную координату мыши, создает новое событие мыши и отправляет новое событие в виджет. Однако в функции виджета mousePressEvent я вижу отладочное сообщение только один раз, и это касается исходных полученных координат, а не моей перехваченной и измененной координаты.
В настоящее время, когда я касаюсь экрана, я получаю отладочные сообщения, и они выглядят так:
Mouse Original: QPoint(192,148)
Mouse New: QPoint(128,148)
Mouse Original: QPoint(192,148)
Mouse New: QPoint(128,148)
Mouse Original: QPoint(192,148)
Mouse New: QPoint(128,148)
Mouse Original: QPoint(192,148)
Mouse New: QPoint(128,148)
Mouse Original: QPoint(192,148)
Mouse New: QPoint(128,148)
Mouse Original: QPoint(192,148)
Mouse New: QPoint(128,148)
Mouse Press 192 148
Как я могу перехватывать события мыши на верхнем уровне, изменять их координаты и публиковать их в своем виджете, одновременно используя исходные события мыши? Спасибо!
основной.cpp:
MyWidget w;
app.installEventFilter(&w);
w.show();
Мой виджет:
bool MyWidget::eventFilter(QObject *object, QEvent *event)
{
if ( event->type() == QEvent::MouseButtonPress ) {
QMouseEvent *orig = static_cast<QMouseEvent*>( event );
QPoint origLocation = orig->pos();
qDebug() << "Mouse Original: "<< origLocation;
int newx = abs(origLocation.x()-320);
QPoint newPoint(newx,origLocation.y());
QMouseEvent *newPosEvent = new QMouseEvent(QEvent::MouseButtonPress, newPoint, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
qDebug() << "Mouse New: " << newPosEvent->pos();
//qApp->postEvent(this, newPos);
return QObject::eventFilter(object, newPosEvent);
}
return QObject::eventFilter(object, event);
}
void MyWidget::mousePressEvent ( QMouseEvent * event )
{
qDebug() << "Mouse Press" << event->x() << event->y();
}