Mmmmc
V2EX  ›  问与答

关于 QTouchEvent,中的 accept()如何实现???

  •  
  •   Mmmmc · May 9, 2018 · 1802 views
    This topic created in 2952 days ago, the information mentioned may be changed or developed.
    bool DrawWidget::touchEvent(QEvent *e)
    {
    QEvent::Type type=e->type();
    switch (type) {
    case QEvent::TouchBegin:
    e->accept();
    break;
    case QEvent::TouchUpdate:
    e->accept();
    break;
    case QEvent::TouchEnd:
    e->accept();
    break;
    default:
    break;
    }
    return QWidget::event(e);
    }
    3 replies    2018-05-09 11:03:25 +08:00
    sbw
        1
    sbw  
       May 9, 2018
    这里一般不需要特殊处理,如果你的问题是一直没收到对应的 touch event 的话,检查一下 DrawWidget 是否设置了允许接受 touch 事件 setAttribute(Qt::WA_AcceptTouchEvents);
    Mmmmc
        2
    Mmmmc  
    OP
       May 9, 2018
    @sbw 前辈
    我不是很清楚,不做处理,那这里 e->accept();的意义何在?我看过 accept()接受和 ignore()忽略,还是不能理解。
    而且我的需求是在触摸事件下绘图,(就是白板的功能),那我只需要在相应事件下写代码就可以了?不知道我的理解对不对。
    sbw
        3
    sbw  
       May 9, 2018   ❤️ 1
    @Mmmmc event 的 accept/ignore 是定义不同组件之前谁来处理这个事件的,如果你设置为 ignore,就会有下一个组件去处理,你如果已经处理过,这个事件就完成了,不会往下传递。设置 WA_AcceptTouchEvents 之后,这里的 event 应该已经是 accepted 的了,你需要的就是 handle 对应的 touch begin/update/end,当做 mouse 的 press/move/release 来实现绘图就行了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2058 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 16:13 · PVG 00:13 · LAX 09:13 · JFK 12:13
    ♥ Do have faith in what you're doing.