QT开发中文网

一个QGraphicsItem移动,另一个QGraphicsItem也一起移动

要实现一个QGraphicsItem移动时,另一个QGraphicsItem也跟随移动,可以使用QGraphicsItemGroup或者自定义的场景管理器来管理这两个图形项。

使用QGraphicsItemGroup:

  1. 创建两个QGraphicsItem对象。
  2. 将它们添加到一个QGraphicsItemGroup对象中。
  3. 在需要移动的时候,通过设置QGraphicsItemGroup对象的位置来实现移动。这将自动影响组内所有的图形项。

示例代码如下:

// 创建场景和视图
QGraphicsScene scene;
QGraphicsView view(&scene);

// 创建两个图形项
QGraphicsEllipseItem* item1 = new QGraphicsEllipseItem(QRectF(0, 0, 50, 50));
QGraphicsRectItem* item2 = new QGraphicsRectItem(QRectF(0, 0, 100, 100));

// 将图形项添加到组中
QGraphicsItemGroup group;
group.addToGroup(item1);
group.addToGroup(item2);

// 设置组的位置
group.setPos(100, 100);

// 添加组到场景中
scene.addItem(&group);

// 移动组(同时移动其中的图形项)
group.setPos(200, 200);

使用自定义的场景管理器: 如果你想更加灵活地控制图形项之间的关系,可以创建一个自定义的场景管理器,并在其advance()函数中实现需要的行为。你可以在每一帧更新图形项之间的位置关系。

示例代码如下:

class MySceneManager : public QGraphicsScene
{
public:
    void advance(int phase) override
    {
        if (phase == 1)
        {
            // 在这里更新图形项之间的位置关系
            item2->setPos(item1->pos().x() + 50, item1->pos().y());
        }
        
        QGraphicsScene::advance(phase);
    }

private:
    QGraphicsEllipseItem* item1;
    QGraphicsRectItem* item2;
};

// 创建场景和视图
MySceneManager scene;
QGraphicsView view(&scene);

// 创建两个图形项
scene.item1 = new QGraphicsEllipseItem(QRectF(0, 0, 50, 50));
scene.item2 = new QGraphicsRectItem(QRectF(0, 0, 100, 100));

// 添加图形项到场景中
scene.addItem(scene.item1);
scene.addItem(scene.item2);

// 设置图形项初始位置
scene.item1->setPos(100, 100);
scene.item2->setPos(150, 100);

// 开启场景的更新机制
scene.startTimer(16); // 每隔16毫秒刷新一次(约60帧/秒)

以上是两种常用的方法,你可以根据实际情况选择适合的方式来管理多个图形项之间的移动。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=9903

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?