Как нарисовать несколько самодельных QWidget на одной сцене?



  • Имеется: виджет QGraphicsView, к которому прицеплена сцена scene. На сцену требуется вывести несколько самодельных виджетов mJoint : public QWidget. У данных виджетов переопределен метод paintEvent(), который их и отрисовывает. На сцену виджеты добавляются так:

    mj = new mJoint(QPoint(100, 100), 50, 0, scene);
    mj2 = new mJoint(QPoint(100, 100), 30, -45, scene);
    scene->addWidget(mj);
    scene->addWidget(mj2);
    

    После этого происходит перерисовка сцены, но виден только тот виджет, который добавлен последним. Оказывается, "when the paint event occurs, the update region has normally been erased", то есть подложка стирается вместе со старым виджетом.
    Как организовать вывод в QGraphicsView несколько виджетов на одной сцене одновременно?



  • @tankist Похоже виджеты просто накладываются друг на друга. Созданные QGraphicsProxyWidget'ы нужно расставить по сцене

    Но вообще виджеты в сцене - очень плохо для производительности, нужно переделать их в кастомные QGraphicsWidget'ы или QGraphicsItem'ы. См http://blog.qt.io/blog/2017/01/19/should-you-be-using-qgraphicsview/ абзац "Graphics View supports embedding QWidgets"



  • @Konstantin-Tokarev said in Как нарисовать несколько самодельных QWidget на одной сцене?:

    Спасибо за ссылку, но речь все же идет о QGraphicsView.
    Действительно, для моего применения QWidget оказался плохой идеей, так как объекты на сцене должны пересекаться и накладываться. Переделал на QGraphicsItem.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.