Qt Can';我抓不到Tap和Hold手势

Qt Can';我抓不到Tap和Hold手势,qt,gesture,Qt,Gesture,我抓取手势()按下了我的一个按钮: buttons[0]->grabGesture(Qt::TapAndHoldGesture); 在构造函数中,并声明: bool event(QEvent *event); 在受保护的插槽中,并按如下方式实现: bool MyClass::event(QEvent *event) { if (event->type() == QEvent::Gesture){ QGestureEvent *gestevent = sta

抓取手势()
按下了我的一个按钮:

buttons[0]->grabGesture(Qt::TapAndHoldGesture);
在构造函数中,并声明:

bool event(QEvent *event);
受保护的插槽中
,并按如下方式实现:

bool MyClass::event(QEvent *event)
{
    if (event->type() == QEvent::Gesture){
        QGestureEvent *gestevent = static_cast<QGestureEvent *>(event);
        if (QGesture *gest = gestevent->gesture(Qt::TapAndHoldGesture)){
            QTapAndHoldGesture *tapgest = static_cast<QTapAndHoldGesture *>(gestevent->gesture(Qt::TapAndHoldGesture));
            cout << "grabbed a gesture event" << endl;
        }
        return true;
    }
    cout << "not a gesture event" << endl;
    return QWidget::event(event);
}
bool MyClass::event(QEvent*event)
{
如果(事件->类型()==QEvent::手势){
QGestureEvent*gestevent=静态施法(事件);
if(qsirpose*gest=gestevent->sirpose(Qt::TapandHoldSirpose)){
qtapandsholdstorage*tapgest=static_cast(gestevent->手势(Qt::tapandsholdstorage));

cout如果处理grap(
MyClass
)事件的类不是检测到手势的类(
QPushButton
假设
buttons[0]
QPushButton
),则需要和事件筛选器:

buttons[0]->grabGesture(Qt::TapAndHoldGesture);
buttons[0]->installEventFilter( myClass ); // myClass being a MyClass instance
现在,
myClass
对象将从
按钮[0]
转发所有事件,这是使用
QObject::eventFilter
虚拟函数完成的:

bool MyClass::eventFilter(QObject *obj, QEvent *event)
{
    if ( event->type() == QEvent::Gesture && obj == buttons[0] )
    {
        QGestureEvent *gestevent = static_cast<QGestureEvent *>(event);
        if (QGesture *gest = gestevent->gesture(Qt::TapAndHoldGesture)){
            QTapAndHoldGesture *tapgest = static_cast<QTapAndHoldGesture *>(gestevent->gesture(Qt::TapAndHoldGesture));
            cout << "grabbed a gesture event" << endl;
            return true;
        }
    }
    // standard event processing
    return Parent::eventFilter(obj, event); // Parent being MyClass parent type, maybe QDialog or QWidget
}
bool MyClass::eventFilter(QObject*obj,QEvent*event)
{
如果(事件->类型()==QEvent::手势和对象==按钮[0])
{
QGestureEvent*gestevent=静态施法(事件);
if(qsirpose*gest=gestevent->sirpose(Qt::TapandHoldSirpose)){
qtapandsholdstorage*tapgest=static_cast(gestevent->手势(Qt::tapandsholdstorage));

你不能解决这个问题吗?我打赌事件是发布到button的,而不是MyClass。你尝试过安装和事件过滤器吗?我最终创建了一个
计时器
并测量了从单击到释放的时间。你的代码应该工作,直到事件在正确的位置得到处理。如果你这样做
按钮[0]->installEventFilter(此)
,其中
这个
MyClass
,那么
MyClass
对象将接收事件(在
QObject::eventFilter
中)。