we have qwidget added scene addwidget. keep showing when switching different scene. our approach temporarily remove scene removeitem , after switching scene, call addwidget re-add it. however, 2nd addwidget raises error:
qgraphicsproxywidget::setwidget: cannot embed widget 0x7835ec8; embedded error can reproduced below code:
qwidget *widget = new qwidget; scene->addwidget(widget); scene->removeitem(widget->graphicsproxywidget()); scene->addwidget(widget); seems removeitem doesn't remove embedded status. know what's happening here? or there other approach meet our requirement?
the qt version qt 5.3.2.
thanks!
you right, apparently removeitem not remove embedded status. code below checks embedded status still there , removes manually using setwidget.
i recommend report qt bug because looks bug (you can point them post, did in past).
qgraphicsscene* scene = new qgraphicsscene(); qwidget *widget = new qwidget; // check widget has no proxy: assert( widget->graphicsproxywidget() == null ); // add item: scene->addwidget(widget); // check widget has proxy attached: assert( widget->graphicsproxywidget() && widget->graphicsproxywidget()->widget() == widget ); // remove item: scene->removeitem(widget->graphicsproxywidget()); if ( widget->graphicsproxywidget() && widget->graphicsproxywidget()->widget() == widget ) { // widget still has proxy attached, qt bug? // manually unset proxy: widget->graphicsproxywidget()->setwidget( null ); // check widget has no proxy: assert( widget->graphicsproxywidget() == null ); } // add item: scene->addwidget(widget); // check widget has proxy attached: assert( widget->graphicsproxywidget() && widget->graphicsproxywidget()->widget() == widget );
Comments
Post a Comment