2016-06-21 2 views
0

Мое приложение на основе 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

ответ

0

Я стучал головой к этому вопросу с QComboBox в течение нескольких недель, используя Qt версии 5.3.2. Наконец, я обнаружил, что передача «-nograb» в ваше приложение Qt в командной строке работает вокруг этой проблемы, но до сих пор не встретила истинной причины. Надеюсь, это сработает для вас!

+0

Отчет об ошибке Qt, где я нашел «исправление»: https://bugreports.qt.io/browse/QTBUG-33143 – murray

Смежные вопросы