qt 6.7,用QGraphicsRectItem画一个矩形,且要求矩形的两边有一个红色的小矩形

在 Qt 6.7 中,要使用 QGraphicsRectItem 画一个矩形,并在矩形的两边添加红色的小矩形,你可以通过继承 QGraphicsRectItem 或直接在一个 QGraphicsScene 中添加这些项目来实现。以下是一个基本的实现示例:

首先,我们创建一个主矩形和两个红色的小矩形。然后,我们将这些小矩形放置在主矩形的两侧。

假设你已经有一个 QGraphicsScene 和一个 QGraphicsView,你可以按照以下步骤进行:

  1. 创建主矩形

 QGraphicsRectItem *mainRect = scene->addRect(0, 0, 200, 100, QPen(Qt::black), QBrush(Qt::white));
  1. 创建并添加左侧的小矩形

 QGraphicsRectItem *leftRect = scene->addRect(-10, 45, 20, 10, QPen(Qt::red), QBrush(Qt::red));
 leftRect->setParentItem(mainRect); // 将小矩形设置为主矩形的子项
 leftRect->setPos(0, 0); // 调整小矩形在主矩形上的位置
  1. 创建并添加右侧的小矩形

 QGraphicsRectItem *rightRect = scene->addRect(190, 45, 20, 10, QPen(Qt::red), QBrush(Qt::red));
 rightRect->setParentItem(mainRect); // 将小矩形设置为主矩形的子项
 rightRect->setPos(0, 0); // 小矩形会相对于父项(主矩形)定位

在这个例子中,scene 是你的 QGraphicsScene 对象。主矩形的尺寸设置为 200x100,而两个红色小矩形被放置在主矩形的左右两侧。通过调用 setParentItem 方法,我们将小矩形设置为主矩形的子项,这样它们就会随着主矩形的移动而移动。

请根据你的具体需求调整矩形的大小和位置。如果你想要更复杂的布局或行为,可能需要重写 QGraphicsRectItem 的某些方法,或者创建一个自定义的 QGraphicsItem

如果你是在一个基于 QML 的项目中工作,你也可以使用 QML 来创建和布局这些图形项。在 QML 中,你可以使用 Rectangle 元素和锚点(anchors)来轻松地实现这种布局。

请提供完整代码 

当然可以。以下是一个简单的Qt应用程序的完整代码,该程序使用QGraphicsViewQGraphicsScene来显示一个主矩形,其两侧各有一个红色的小矩形。

首先,确保你已经安装了Qt 6.7,并配置了Qt Creator或相应的开发环境。

main.cpp:

 
#include <QApplication>  
#include <QGraphicsScene>  
#include <QGraphicsView>  
#include <QGraphicsRectItem>  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    // 创建场景  
    QGraphicsScene scene;  
  
    // 创建主矩形  
    QGraphicsRectItem *mainRect = scene.addRect(0, 0, 200, 100, QPen(Qt::black), QBrush(Qt::white));  
  
    // 创建左侧红色小矩形  
    QGraphicsRectItem *leftRect = scene.addRect(-10, 45, 20, 10, QPen(Qt::red), QBrush(Qt::red));  
    leftRect->setParentItem(mainRect);  
    leftRect->setPos(0, 0); // 相对于主矩形定位  
  
    // 创建右侧红色小矩形  
    QGraphicsRectItem *rightRect = scene.addRect(190, 45, 20, 10, QPen(Qt::red), QBrush(Qt::red));  
    rightRect->setParentItem(mainRect);  
    // 由于rightRect是mainRect的子项,所以其位置是相对于mainRect的  
    // 因此,我们将其x坐标设置为mainRect的宽度减去rightRect的宽度,以确保它位于mainRect的右侧  
    rightRect->setPos(mainRect->rect().width() - rightRect->rect().width(), 0);  
  
    // 创建视图并设置场景  
    QGraphicsView view(&scene);  
    view.setRenderHint(QPainter::Antialiasing);  
    view.setBackgroundBrush(QPixmap(":/images/cheese.jpg")); // 你可以替换为自己的图片或颜色  
    view.setCacheMode(QGraphicsView::CacheBackground);  
    view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);  
    view.setDragMode(QGraphicsView::ScrollHandDrag);  
    view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Rectangles Example"));  
    view.resize(500, 400);  
    view.show();  
  
    return app.exec();  
}

请注意,上述代码中的setBackgroundBrush(QPixmap(":/images/cheese.jpg"))行是设置背景图片的示例。你需要根据自己的项目配置来替换这个图片路径,或者简单地使用颜色作为背景。

RectanglesExample.pro:

 
QT += core gui widgets  
  
TARGET = RectanglesExample  
TEMPLATE = app  
  
SOURCES += main.cpp  
  
# 如果你使用了图片资源,确保添加了资源文件  
# RESOURCES += \  
#     qrc/myresources.qrc

如果你不使用资源文件或图片作为背景,请注释掉或删除与图片相关的代码行。

这段代码创建了一个简单的Qt应用程序,其中包含一个QGraphicsScene和一个QGraphicsView。在场景中,我们添加了一个主矩形和两个红色的小矩形,分别位于主矩形的左右两侧。你可以根据需要调整矩形的大小、位置和颜色。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值