Мое приложение на основе Qt 5.5 на малине Pi перестает получать щелчки мыши с сенсорного экрана после, например, закрытия QDialogBox
. Следует отметить, что мышь USB работает правильно.Qt 5.5: приложение перестает получать mouseclicks с сенсорного экрана Raspberry Pi
Следующее небольшое приложение также демонстрирует эту проблему. Главное окно содержит только один QComboBox
. После запуска приложения нажмите на QComboBox
на сенсорном экране, и вместо выбора A, B или C щелкните на рабочем столе, чтобы выбор снова исчез. После этого виджет больше не получает щелчков мыши с сенсорного экрана. Если мы снова выберем QComboBox
с помощью мыши USB, нажав дважды, мы снова сможем использовать сенсорный экран.
Следует отметить, что в моем основном приложении после «ремонта» с помощью мыши USB щелчок на сенсорном экране будет выбирать только, например, QComboBox
, даже жестко щелкнув в другом месте. Если я смотрю события кнопки мыши, обычно каждые MouseButtonPress
и MouseButtonRelease
попадают парами, то есть два нажатия, за которыми следуют два релиза. Перед блокировкой сенсорного экрана я вижу нечетное число событий MouseButtonPress
подряд. Следующий «USB-ремонт» демонстрирует нечетное количество событий MouseButtonRelease
подряд.
Следует также отметить, что с помощью USB-мыши, чтобы открыть QComboBox
, а затем закрыть его снова, нажав на рабочем столе, потребуется два щелчки от USB мыши к самовосстановлению, а также. Но USB-мышь починит себя.
Как мы можем избежать использования сенсорного экрана?
Файл: Bug.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Bug
TEMPLATE = app
SOURCES += main.cpp MainWindow.cpp
HEADERS += MainWindow.h
Файл: main.cpp
#include <QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Файл: MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget * parent = 0);
};
#endif /* MAINWINDOW_H */
Файл: MainWindow.cpp
#include <QComboBox>
#include "MainWindow.h"
MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent)
{
QComboBox * bx = new QComboBox(this);
bx->addItem("A");
bx->addItem("B");
bx->addItem("C");
setCentralWidget(bx);
}
В соответствии с evtest
сенсорный экран использует FT5406 memory based driver
. Я использую 7-дюймовый сенсорный экран от Element14. Конечно, возможно, что я не установил правильные драйверы, поэтому, если вам нужна дополнительная информация об установленных пакетах, то, пожалуйста, дайте мне знать, и я добавлю его к вопросу.
P.S: Это, вероятно, та же проблема, как описано в Qt 5.5 - touchscreen-events only working in initial (first) window
Отчет об ошибке Qt, где я нашел «исправление»: https://bugreports.qt.io/browse/QTBUG-33143 – murray