"Isturdia" (lá em MG é 'outro dia'), estava precisando verificar a situação de longo pressionamento de teclas para um aplicativo.
Como não encontrei nada pronto e/ou similar na internet, fui testando opções e situações até encontrar algo que funcionasse.
A rotina ficou conforme abaixo, tendo sido inicialmente produzida para funcionar com um qtreewidget.
Todavia, deve funcionar com qualquer qwidget.
Vou postar aqui para que outros possam ter acesso, inclusive pelos mecanismos de busca.
Espero ter ajudado.
MarceloG
Example ...
x:=qtreeWidget()
...
__OBJADDDATA(x,'long_press') // cria data
x:long_press:=0
x:CONNECT(QEvent_KeyPress,{|o|LONGPRESSKEY(o,x)}) // sinal tecla pressionada
x:CONNECT(QEvent_KeyRelease,{|o|LONGPRESSKEY(o,x)}) // sinal tecla "despressionada"
//============================================================================
PROCEDURE LONGPRESSKEY(o,x)
LOCAL aKey
aKey:={Qt_Key_Return,Qt_Key_Enter} // teclas a serem monitoras - no caso ENTER
IF ASCAN(aKey,o:KEY()) # 0
IF o:TYPE() == QEvent_KeyPress
IF !o:ISAUTOREPEAT() // primeiro pressionamento
x:long_press:=SECONDS()
ENDIF
ELSEIF o:TYPE() == QEvent_KeyRelease
IF !o:ISAUTOREPEAT() // primeiro despressionamento
IF (SECONDS() - x:long_press) > 1.2 //aumente ou diminua o tempo
// ... function/ procedure a ser executada em face do evento
ENDIF
x:long_press:=SECONDS()
ENDIF
ENDIF
ENDIF
RETURN