Qt中QGraphicsView QGraphicsScene QGraphicsRectItem的问题

时间:2023-02-01 13:51:13
#include <QtGui/QApplication>

#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QGraphicsScene>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsView v;
    v.setGeometry(300, 200, 800, 480);

    v.show();
    QGraphicsScene *scene = new QGraphicsScene();
    scene->setSceneRect(0, 0, 800, 480);
    v.setScene(scene);

    QGraphicsRectItem *item = new QGraphicsRectItem(200, 0, 400, 400, 0, scene);
    item->setBrush(QBrush(QColor(255, 0, 0)));
    QGraphicsRectItem *item1 = new QGraphicsRectItem(0, 0, 100, 100, item, 0);
    item1->setBrush(QBrush(QColor(255, 255, 0)));
    
    return a.exec();
}

代码中,我明明为item1指定了item为它的父item,为什么显示的时候item1还是显示在了场景的(0, 0)位置,而不是item上的(0, 0)位置。如果调用item->hide();item1也会跟着消失,说明父item是设置成功了,但是显示为什么是这样? 

7 个解决方案

#1


为什么没有人回答? Qt中QGraphicsView QGraphicsScene QGraphicsRectItem的问题

#2


item默认的原点都在scene的原点,如果需要改变原点,要自己手动修改。

#3


引用 1 楼 panrongtao1 的回复:
为什么没有人回答? Qt中QGraphicsView QGraphicsScene QGraphicsRectItem的问题

回答你的问题不是义务,更不是责任,只是乐于助人的精神。

#4


郁闷中。。。。。

#5


没人回答么,也在等这个问题。

#6


void QGraphicsItem::setPos(const QPointF & pos)

#7


楼主, QGraphicsRectItem *item = new QGraphicsRectItem(200, 0, 400, 400, 0, scene);这一句中其实是设定了item的boundingRect(可以认为是画出来的矩形,一般还要考虑画笔宽度)的左上角点相对于Item的坐标原点的坐标是(200,0),在这个情况下左上角点和原点并不重合,因此显示出来的item1的确是在item的(0,0)位置。

#1


为什么没有人回答? Qt中QGraphicsView QGraphicsScene QGraphicsRectItem的问题

#2


item默认的原点都在scene的原点,如果需要改变原点,要自己手动修改。

#3


引用 1 楼 panrongtao1 的回复:
为什么没有人回答? Qt中QGraphicsView QGraphicsScene QGraphicsRectItem的问题

回答你的问题不是义务,更不是责任,只是乐于助人的精神。

#4


郁闷中。。。。。

#5


没人回答么,也在等这个问题。

#6


void QGraphicsItem::setPos(const QPointF & pos)

#7


楼主, QGraphicsRectItem *item = new QGraphicsRectItem(200, 0, 400, 400, 0, scene);这一句中其实是设定了item的boundingRect(可以认为是画出来的矩形,一般还要考虑画笔宽度)的左上角点相对于Item的坐标原点的坐标是(200,0),在这个情况下左上角点和原点并不重合,因此显示出来的item1的确是在item的(0,0)位置。