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拆分矩形、合并矩形