当前位置:编程学习 > wap >>

关于Qt触摸事件的问题


bool GraphicsScene::event(QEvent *event){
    qDebug()<<event->type();
    switch (event->type()) {
    case QEvent::TouchBegin:
    {
        qDebug()<<"touch Begin";
        return true;
    }
    case QEvent::TouchUpdate:
    {
        qDebug()<<"touch Update";
        return true;
    }
    case QEvent::TouchEnd:
    {
        qDebug()<<"touch end";
        return true;
    }
    default:
        return QGraphicsScene::event(event);
}

这里,输出的事件代码只有197 , 没有QEvent的Touch事件(194,195,196)。求解,如何才能捕获到Touch事件 获取QTouchEvent --------------------编程问答-------------------- 分也太低了吧 --------------------编程问答-------------------- 确定两点:
1.设备支持touch事件(是触控设备);
2.需要设置窗口属性:setAttribute(Qt::WA_AcceptTouchEvents);  //接收touch消息 --------------------编程问答--------------------
引用 2 楼 yanbin_1985525 的回复:
确定两点:
1.设备支持touch事件(是触控设备);
2.需要设置窗口属性:setAttribute(Qt::WA_AcceptTouchEvents);  //接收touch消息

都有设置,我刚刚试过了,同样的代码,在QWidget中,可以捕获到Touch事件(194,195,196),而在QGraphicsScene中,只有197 --------------------编程问答-------------------- 根据我的经验,接受触碰事件的是QGraphicsView,然后如果有需要,view会把事件丢给scene处理。而view是widget,按你说的,QWidget可以捕获到touch事件,那么view一定能够捕获到touch事件,所以你去view的event函数中查一下它把touch事件怎么了吧。 --------------------编程问答--------------------
引用 2 楼 yanbin_1985525 的回复:
确定两点:
1.设备支持touch事件(是触控设备);
2.需要设置窗口属性:setAttribute(Qt::WA_AcceptTouchEvents);  //接收touch消息


+1

确定下你的设备是否是触控设备,别是鼠标在那点击。
我在开发板上可以捕获到触控事件,没有问题! --------------------编程问答--------------------
引用 4 楼 rjsloth 的回复:
根据我的经验,接受触碰事件的是QGraphicsView,然后如果有需要,view会把事件丢给scene处理。而view是widget,按你说的,QWidget可以捕获到touch事件,那么view一定能够捕获到touch事件,所以你去view的event函数中查一下它把touch事件怎么了吧。

谢谢你的回答,我也试过了。在view中,同样的得到的输出的事件代码只有197 , 没有QEvent的Touch事件(194,195,196)。 --------------------编程问答--------------------
引用 5 楼 xiaoxiaokun888 的回复:
Quote: 引用 2 楼 yanbin_1985525 的回复:

确定两点:
1.设备支持touch事件(是触控设备);
2.需要设置窗口属性:setAttribute(Qt::WA_AcceptTouchEvents);  //接收touch消息


+1

确定下你的设备是否是触控设备,别是鼠标在那点击。
我在开发板上可以捕获到触控事件,没有问题!

谢谢你的回答,我有尝试过,使用QWidget测试,QWidget的event函数中,可以获取到QEvent的Touch事件(194,195,196),当我使用VIEW与SCENE是,事件代码莫名的就变成了197了 --------------------编程问答-------------------- 是不是因为你没有对需要接受touch事件的GraphicsItem调用函数setAcceptTouchEvents(true)?因为GraphicsItem默认是不接受touch事件的。 --------------------编程问答--------------------
引用 8 楼 rjsloth 的回复:
是不是因为你没有对需要接受touch事件的GraphicsItem调用函数setAcceptTouchEvents(true)?因为GraphicsItem默认是不接受touch事件的。

在scene中,我还没有添加item到里面。我仅仅只是把touch设备连接上后,用手点击设备,然后在scene里面怎么都没有想要获取到的Touch信号 --------------------编程问答--------------------
引用 9 楼 shy_wing 的回复:
Quote: 引用 8 楼 rjsloth 的回复:

是不是因为你没有对需要接受touch事件的GraphicsItem调用函数setAcceptTouchEvents(true)?因为GraphicsItem默认是不接受touch事件的。

在scene中,我还没有添加item到里面。我仅仅只是把touch设备连接上后,用手点击设备,然后在scene里面怎么都没有想要获取到的Touch信号


好吧,我只能说,虽然QGraphicsView是QWidget,但是还是和QWidget有很大区别。你还是加上item之后再去点item看能不能获得touch事件吧,你view里什么都没有添加,估计Qt把这个touch事件忽略了。同时你也要注意item默认是不接受touch事件的。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,