Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Keyboard event not functioning until first mouse click
lsatenstein last edited by
I am seeking help for what appears to be an event trapping problem.
An application which consists of a matrix of 3 x 8 cells, has each cell functioning like a button. The target systems for which this application will run has no mouse. However each of our development systems, (Linux) has a mouse.
When I start the application, it comes up almost correctly. It displays correctly. But all keyboard activity is refused (left, right, up, down, enter, tab, etc. etc.. until I click a mouse button with the mouse pointer anywhere (on or off the mainWindow). The mouse click appears to initialize the event processor (filter), and from thereon, the keyboard and application operate as anticipated.
Since the target system has no mouse, I would like to know if there is a class or Qt function to simulate a mouse click. This is not the best solution, but is one that will work. Is there a method to initialize the event filter for keyboard detection?
I've done some searching, but have not discovered a function or class with which I could experiment.
I have tested with different QtSDK versions using Ubuntu, Fedora, Debian, Centos, (32 and 64 bit systems). Only on one system does the keyboard appear to function on application startup. But... with a recent Qt upgrade, this is no longer the case.
Any guidance or suggestions about where to look to solve this worrisome probem would be appreciated.
leon.anavi last edited by
[quote author="lsatenstein" date="1334862985"]
Since the target system has no mouse, I would like to know if there is a class or Qt function to simulate a mouse click. This is not the best solution, but is one that will work. Is there a method to initialize the event filter for keyboard detection? [/quote]
You can simulate mouse events using class "QTestEventList":http://doc.qt.nokia.com/main-snapshot/qtesteventlist.html Use "addMouseClick":http://doc.qt.nokia.com/main-snapshot/qtesteventlist.html#addMouseClick to simulate a single click.
Nosf last edited by
I guess you can simulate the mouse click by
QApplication::postEvent(main_window, new QMouseEvent(QEvent::MouseButtonPress, QPoint(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier));
I am not sure this is the right approach though. You can try to see if this gets you sorted until you get a better solution to sort the Event propagation.
Wilk last edited by
Try using "QWidget::setFocus()":http://qt-project.org/doc/qt-4.8/qwidget.html#setFocus-2 slot or "QWidget::setFocus()":http://qt-project.org/doc/qt-4.8/qwidget.html#setFocus method with "Qt::MouseFocusReason or Qt::OtherFocusReason":http://qt-project.org/doc/qt-4.8/qt.html#FocusReason-enum as argument. Also you may try "QWidget::setFocusPolicy()":http://qt-project.org/doc/qt-4.8/qwidget.html#focusPolicy-prop.
dbzhang800 last edited by
I agree with Wilk.
Make sure your window is activated and your widget has focus.
lsatenstein last edited by
Will be trying the proposed solutions this morning.
Thank you for the great suggestions,