Qt QML Settings.hasTouchScreen возвращает false - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь выяснить, почему щелчок не работает с примером TreeView на моем Raspberry Pi3 с сенсорным экраном.

Глядя на qml-код TreeView.qml, например, https://github.com/RSATom/Qt/blob/master/qtquickcontrols/src/controls/TreeView.qml:

BasicTableView {
...
    __mouseArea: MouseArea {
        id: mouseArea

        parent: __listView
        width: __listView.width
        height: __listView.height
        z: -1
        propagateComposedEvents: true
        focus: true
        // If there is not a touchscreen, keep the flickable from eating our mouse drags.
        // If there is a touchscreen, flicking is possible, but selection can be done only by tapping, not by dragging.
        preventStealing: !Settings.hasTouchScreen
        ...
     }
}

Аналогично, глядя на qml-код для BasicTableView.qml, кажется, что поведение контролируется Settings.hasTouchScreen.

Согласно: https://code.woboq.org/qt5/qtquickcontrols/src/controls/Private/qquickcontrolsettings.cpp.html это соответствует следующему методу:

bool QQuickControlSettings1::hasTouchScreen() const
{
    const auto devices = QTouchDevice::devices();
    for (const QTouchDevice *dev : devices)
        if (dev->type() == QTouchDevice::TouchScreen)
            return true;
    return false;
}

Однако, в моем случае, Settings.hasTouchScreen возвращает false; т.е. сенсорный экран (хотя и работает для остальных), не правильно определяется средой QML, что, вероятно, объясняет, почему не работает щелчок.

Согласно https://doc.qt.io/qt-5/qtouchdevice.html, мое сенсорное устройство должно было быть каким-либо образом зарегистрировано частным QWindowSystemInterface::registerTouchDevice() методом, но не было.

Как мне заставить это работать? Спасибо!

1 Ответ

0 голосов
/ 05 марта 2019

Кажется, он не работает корректно с tslib, но работает с помощью плагина evdevtouch, который включается добавлением следующих аргументов командной строки при запуске программы:

-plugin evdevtouch:/dev/input/eventX

, где eventX - событие, назначенное для сенсорного ввода.

С этим QTouchDevice::devices() больше не пусто, и щелчок TreeView работает.

...