Есть у меня кнопки, которым надо включить автоповтор. Но главное окно само обрабатывает жест 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 );
- это в кнопке. Что делать в главном окне - не понятно. Кнопок с автоповтором несколько, кнопок без автоповтора тоже несколько, им перехват жеста не обязателен (хотя возможен).