zuck
13th May 2009, 15:04
Hi!
We're using a biometric sensor as input device for an embedded project.
I've created a QWSKeyboardHandler derived class which sends some key press events to the QWSServer instance. It uses the QWSKeyboardHandler::processKeyEvent method to send all key press events.
pkFingerPrintManager::pkFingerPrintManager()
: QWSKeyboardHandler()
{
QWSServer::setKeyboardHandler(this);
}
// ... CUT ...
void pkFingerPrintManager::notifyInputEvent(int dx, int dy, int state)
{
if (this->isNavigateRunning())
{
m_dx += dx;
m_dy += dy;
if (m_dx >= PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Right, 0, true, false);
m_dx = 0;
}
if (m_dx <= -PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Left, 0, true, false);
m_dx = 0;
}
if (m_dy >= PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Down, 0, true, false);
m_dy = 0;
}
if (m_dy <= -PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Up, 0, true, false);
m_dy = 0;
}
if (dx == 0)
m_dx = 0;
if (dy == 0)
m_dy = 0;
}
}
On my test machine (Linux x86) everything works.
Now we are testing it on the final ARM-based architecture but no key event is sent (or received). The process flow enters in one of the four "if" statements but the test widget doesn't receive any events.
This is the test widget "keyPressEvent" filter body:
void TestWidget::keyPressEvent(QKeyEvent* event)
{
if (event->key() == Qt::Key_Left)
{
// ...
event->accept();
return;
}
if (event->key() == Qt::Key_Right)
{
// ...
event->accept();
return;
}
// ...
event->ignore();
}
Could you help me to find the problem, please?
We're using a biometric sensor as input device for an embedded project.
I've created a QWSKeyboardHandler derived class which sends some key press events to the QWSServer instance. It uses the QWSKeyboardHandler::processKeyEvent method to send all key press events.
pkFingerPrintManager::pkFingerPrintManager()
: QWSKeyboardHandler()
{
QWSServer::setKeyboardHandler(this);
}
// ... CUT ...
void pkFingerPrintManager::notifyInputEvent(int dx, int dy, int state)
{
if (this->isNavigateRunning())
{
m_dx += dx;
m_dy += dy;
if (m_dx >= PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Right, 0, true, false);
m_dx = 0;
}
if (m_dx <= -PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Left, 0, true, false);
m_dx = 0;
}
if (m_dy >= PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Down, 0, true, false);
m_dy = 0;
}
if (m_dy <= -PK_FPM_KEY_THRESHOLD)
{
this->processKeyEvent(QEvent::KeyPress, Qt::Key_Up, 0, true, false);
m_dy = 0;
}
if (dx == 0)
m_dx = 0;
if (dy == 0)
m_dy = 0;
}
}
On my test machine (Linux x86) everything works.
Now we are testing it on the final ARM-based architecture but no key event is sent (or received). The process flow enters in one of the four "if" statements but the test widget doesn't receive any events.
This is the test widget "keyPressEvent" filter body:
void TestWidget::keyPressEvent(QKeyEvent* event)
{
if (event->key() == Qt::Key_Left)
{
// ...
event->accept();
return;
}
if (event->key() == Qt::Key_Right)
{
// ...
event->accept();
return;
}
// ...
event->ignore();
}
Could you help me to find the problem, please?