qt 矩形的合并和拆分

1.概要

利用QGraphicsRectItem 创建一个矩形,并用这个矩形做参数,拆分成两个相距10个像素的矩形,显示2秒后,然后再将这两个矩形合并成一个矩形,合并的时候用这两个矩形做参数,返回一个新的矩形,请给出完整代码,并在一个文件中实现;矩形合并的时候,不要用距离10,合并后的矩形长度用两个入参的矩形计算

2.代码

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QTimer>

// 函数用于拆分矩形
std::pair<QGraphicsRectItem*, QGraphicsRectItem*> splitRect(QGraphicsRectItem *originalRect) {
    QRectF originalRectF = originalRect->rect();
    QPointF originalPos = originalRect->pos();

    QRectF leftRect(0, 0, originalRectF.width() / 2, originalRectF.height());
    QRectF rightRect(0, 0, originalRectF.width() / 2, originalRectF.height());

    QGraphicsRectItem *leftPart = new QGraphicsRectItem(leftRect);
    QGraphicsRectItem *rightPart = new QGraphicsRectItem(rightRect);

    leftPart->setPos(originalPos);
    rightPart->setPos(QPointF(originalPos.x() + leftRect.width() + 10, originalPos.y()));

    leftPart->setBrush(originalRect->brush());
    rightPart->setBrush(originalRect->brush());

    return {leftPart, rightPart};
}

// 函数用于合并矩形,根据两个矩形的位置和大小来计算合并后的矩形
QGraphicsRectItem* mergeRects(QGraphicsRectItem *rect1, QGraphicsRectItem *rect2) {
    QRectF rect1F = rect1->rect();
    QPointF rect1Pos = rect1->pos();
    QRectF rect2F = rect2->rect();
    QPointF rect2Pos = rect2->pos();

    // 计算合并后矩形的位置和大小
    qreal mergedWidth = rect1F.width() + (rect2Pos.x() - rect1Pos.x() - rect1F.width()) + rect2F.width();
    QRectF mergedRect(rect1Pos.x(), rect1Pos.y(), mergedWidth, rect1F.height());

    QGraphicsRectItem *mergedRectItem = new QGraphicsRectItem(mergedRect);
    mergedRectItem->setBrush(rect1->brush());

    // 清理旧的矩形
    delete rect1;
    delete rect2;

    return mergedRectItem;
}
//利用QGraphicsRectItem 创建一个矩形,并用这个矩形做参数,拆分成两个相距10个像素的矩形,显示2秒后,然后再将这两个矩形合并成一个矩形,合并的时候用这两个矩形做参数,返回一个新的矩形,请给出完整代码,并在一个文件中实现;矩形合并的时候,不要用距离10,合并后的矩形长度用两个入参的矩形计算
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QGraphicsScene scene;
    QGraphicsView view(&scene);

    // 创建原始矩形
    QGraphicsRectItem *originalRect = scene.addRect(0, 0, 200, 100, QPen(Qt::black), QBrush(Qt::blue));

    view.show();

    // 拆分矩形
    auto [leftRect, rightRect] = splitRect(originalRect);
    scene.addItem(leftRect);
    scene.addItem(rightRect);
    originalRect->setVisible(false); // 隐藏原始矩形

    // 2秒后合并矩形
    QTimer::singleShot(10000, [&]() {
        QGraphicsRectItem *mergedRect = mergeRects(leftRect, rightRect);
        scene.addItem(mergedRect);
    });

    return app.exec();
}

3.运行结果

qt拆分矩形、合并矩形

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值