在 Qt 6.7 中,要使用 QGraphicsRectItem 画一个矩形,并在矩形的两边添加红色的小矩形,你可以通过继承 QGraphicsRectItem 或直接在一个 QGraphicsScene 中添加这些项目来实现。以下是一个基本的实现示例:
首先,我们创建一个主矩形和两个红色的小矩形。然后,我们将这些小矩形放置在主矩形的两侧。
假设你已经有一个 QGraphicsScene 和一个 QGraphicsView,你可以按照以下步骤进行:
-
创建主矩形:
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->setPos(0, 0); // 小矩形会相对于父项(主矩形)定位 |
在这个例子中,scene 是你的 QGraphicsScene 对象。主矩形的尺寸设置为 200x100,而两个红色小矩形被放置在主矩形的左右两侧。通过调用 setParentItem 方法,我们将小矩形设置为主矩形的子项,这样它们就会随着主矩形的移动而移动。
请根据你的具体需求调整矩形的大小和位置。如果你想要更复杂的布局或行为,可能需要重写 QGraphicsRectItem 的某些方法,或者创建一个自定义的 QGraphicsItem。
如果你是在一个基于 QML 的项目中工作,你也可以使用 QML 来创建和布局这些图形项。在 QML 中,你可以使用 Rectangle 元素和锚点(anchors)来轻松地实现这种布局。
请提供完整代码
当然可以。以下是一个简单的Qt应用程序的完整代码,该程序使用QGraphicsView和QGraphicsScene来显示一个主矩形,其两侧各有一个红色的小矩形。
首先,确保你已经安装了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。在场景中,我们添加了一个主矩形和两个红色的小矩形,分别位于主矩形的左右两侧。你可以根据需要调整矩形的大小、位置和颜色。
1327

被折叠的 条评论
为什么被折叠?



