c++ - Qt child QGraphicItem does not use parent coordinate system -


i'm trying create buildingtile class has qgraphicsrectitem base.

in buildingtile i'm trying add qgraphicsellipseitems , qgraphicssimpletextitem these not use buildingtile's coordinate system although on http://doc.qt.io/qt-5/graphicsview.html: "child coordinates relative parent's coordinates. if child untransformed, difference between child coordinate , parent coordinate same distance between items in parent coordinates."

i glad if me this.

http://i.imgur.com/5b0isld.png

the header:

class buildingtile : public qgraphicsrectitem {  private:     building* m_building;      bool m_empty;     qgraphicssimpletextitem* m_name;     qlist<qgraphicsellipseitem*> m_colonists; public:     buildingtile(qreal x, qreal y, qcolor color, qstring name, building* m_building = 0);      bool isempty() const {return m_empty;}     void setempty(bool empty) {m_empty = empty;}     void setbuilding(building* building) {m_building = building;} }; 

the constructor:

buildingtile::buildingtile(qreal x, qreal y, qcolor color, qstring name, building *building) : qgraphicsrectitem(x,y,150,75) {     m_building = building;     setbrush(color);     for(int = 0; i<3; i++)     {         qgraphicsellipseitem* item = new qgraphicsellipseitem(10+i*35, 40, 25, 25, this);         m_colonists.append(item);         item->setbrush(qcolor(255,255,255));     }     m_name = new qgraphicssimpletextitem(name, this);     m_name->setpos(10,10); } 

mainwindow constructor:

mainwindow::mainwindow(qwidget *parent) : qwidget(parent) {     qgraphicsscene* scene = new qgraphicsscene;     buildingtile* item = new buildingtile(0, 0, qcolor(203,130,232), "small market");     scene->additem(item);     item = new buildingtile(150, 0, qcolor(91,161,212), "indigo plant");     scene->additem(item);     item = new buildingtile(300, 0, qcolor(120,113,107), "coffee roaster");     scene->additem(item);      qgraphicsview* view = new qgraphicsview;     view->setscene(scene);     view->setalignment(qt::aligntop | qt::alignleft);      qhboxlayout *layout = new qhboxlayout;     layout->addwidget(view);     setlayout(layout); } 

all buildingtile items have origin @ scene's origin, i.e. (0, 0) in scene coordinates.

for example (your second buildingtile item):

item = new buildingtile(150, 0, qcolor(91,161,212), "indigo plant"); scene->additem(item); 

this creates buildingtile item located @ (0, 0), containing rectangle located @ (150,0) of own coordinate system. you're changing position of rectangle in own coordinate system, not position of rect's coordinate system in relation parent (the scene).

now create ellipses , labels in relation buildingtile coordinate systems, identical , located @ (0,0) in "global" scene coordinates, end scene coordinates (10, 10) labels.

to achieve want, do:

item = new buildingtile(0, 0, qcolor(91,161,212), "indigo plant"); scene->additem(item); item->setpos(150, 0); 

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -