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
中)。