Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Июнь 06, 2018, 23:19



Название: Полностью отобрать жест виджетом у главного окна.
Отправлено: Гурман от Июнь 06, 2018, 23:19
Есть у меня кнопки, которым надо включить автоповтор. Но главное окно само обрабатывает жест Tap&Hold. По умолчанию кнопке долгое нажатие не достаётся.

Код:
bool MainWindow::event(QEvent *e)
{
...
    return e->type() == QEvent::Gesture ? gesture( static_cast<QGestureEvent*>( e ) )
                                        : QWidget::event( e );
}

Но есть у кнопки вызов QWidget::grabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags()). И он действительно помогает - кнопка начинает работать с автоповтором. Но почему-то жест не перехватывается полностью, и главное окно тоже его отрабатывает. Выглядит это забавно - у кнопки интервал на автоповтор короткий, она начинает повторять, а потом через заданное у главного окна время оно отрабатывает этот же жест, и затем снова работает автоповтор кнопки. Второй параметр - флаги - на это не влияет, он либо наоборот, разрешает передавать жесты родителю, либо запрещает передавать потомкам. А мне надо запретить обрабатывать жест родителем, если он обрабатывается потомком. И чё-то я не вижу, как это сделать... Причём сделать это надо не для всех кнопок, а только для тех, у которых я в пропертях включаю автоповтор, то есть по условию.

Код:
    if( autoRepeat() )
        grabGesture( Qt::TapAndHoldGesture );
- это в кнопке. Что делать в главном окне - не понятно. Кнопок с автоповтором несколько, кнопок без автоповтора тоже несколько, им перехват жеста не обязателен (хотя возможен).