Нажатие и удержание кнопки Qml не срабатывает при перемещении мыши или пальца - PullRequest
0 голосов
/ 07 марта 2019

Нажатие кнопки Qml с помощью мыши или пальца (на сенсорном устройстве) и слишком сильное перемещение не будут издавать сигнал pressAndHold () .

pressAndHold ()

Этот сигнал испускается, когда кнопка интерактивно нажата и удерживается пользователем с помощью прикосновения или мыши.

Перемещение на несколько пикселей приведет к появлению сигнала pressAndHold (), но, похоже, порог оченьмаленький и это очень очевидная проблема на сенсорном устройстве, где палец естественно немного двигается при нажатии на кнопку.Поэтому сигнал pressAndHold () не будет генерироваться надежно.

1 Ответ

2 голосов
/ 07 марта 2019

Решение:

Установите для свойства startDragDistance значение, превышающее значение по умолчанию (10)

QGuiApplication::styleHints()->setStartDragDistance(100);

Объяснение:

Глядя на исходный код QQuickAbstractButton, можно найти метод:

void QQuickAbstractButtonPrivate :: handleMove (const QPointF & point)

void QQuickAbstractButtonPrivate::handleMove(const QPointF &point)
{
    Q_Q(QQuickAbstractButton);
    QQuickControlPrivate::handleMove(point);
    setMovePoint(point);
    q->setPressed(keepPressed || q->contains(point));

    if (!pressed && autoRepeat)
        stopPressRepeat();
    else if (holdTimer > 0 && (!pressed || QLineF(pressPoint, point).length() > QGuiApplication::styleHints()->startDragDistance()))
        stopPressAndHold();
}

Когдарасстояние от начальной точки до перемещенной точки превышает QGuiApplication::styleHints()->startDragDistance() Порог stopPressAndHold() называется отменой нажатия и удержания действия.

...