Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-69337

QGraphicsView: no mouse events in wasm

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • None
    • 5.11
    • QPA
    • None
    • WebAssembly
    • 1c0f0d3072c0944f95bbc15b7e5d3c1629978a6b

    Description

      With the following code, no text is ever drawn in the item in WASM so no press / move / release events are received.

      #include <QApplication>
      #include <QGraphicsScene>
      #include <QGraphicsView>
      #include <QGraphicsItem>
      #include <QGraphicsSceneMouseEvent>
      struct MyItem : QGraphicsItem
      {
          QRectF boundingRect() const override
          {
              return {100, 100, 100, 100};
          }
      
          void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
          {
              painter->setPen(QPen(QColor(Qt::darkGray).darker(), 3));
              painter->setBrush(Qt::lightGray);
              painter->drawRect(boundingRect());
      
              painter->drawText(boundingRect(), m_text);
          }
      
          void mousePressEvent(QGraphicsSceneMouseEvent *event) override
          {
              m_text = QString("press: x: %1, y: %2")
                      .arg(event->scenePos().x())
                      .arg(event->scenePos().y());
              event->accept();
              update();
          }
      
          void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
          {
              m_text = QString("move: x: %1, y: %2")
                      .arg(event->scenePos().x())
                      .arg(event->scenePos().y());
              event->accept();
              update();
          }
      
          void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
          {
              m_text = QString("release: x: %1, y: %2")
                      .arg(event->scenePos().x())
                      .arg(event->scenePos().y());
              event->accept();
              update();
          }
      
          QString m_text;
      };
      
      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
          QGraphicsScene b;
          b.addItem(new MyItem);
          QGraphicsView v{&b};
          v.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
          v.showFullScreen();
      
          return a.exec();
      }
      
      

       

      If I replace the QGraphicsView by a custom one :

      struct MyView : QGraphicsView
      {
          using QGraphicsView::QGraphicsView;
      
          void mousePressEvent(QMouseEvent *event) override
          {
              qDebug() << "press" << event;
              QGraphicsView::mousePressEvent(event);
          }
      
          void mouseReleaseEvent(QMouseEvent *event) override
          {
              qDebug() << "release" << event;
              QGraphicsView::mouseReleaseEvent(event);
          }
      
          void mouseMoveEvent(QMouseEvent *event) override
          {
              qDebug() << "move" << event;
              QGraphicsView::mouseMoveEvent(event);
          }
      };
      

      I can see the debug messages so the mouse event at least get delivered there.

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            lpotter Lorn Potter
            jcelerier Jean-Michaël Celerier
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes