qt qgraphicsitem 画线
时间: 2023-11-20 08:50:34 浏览: 224
好的,关于在 Qt 中使用 QGraphicsItem 画线,可以通过以下步骤实现:
1. 创建一个 QGraphicsLineItem 对象,该对象表示一条直线。
2. 设置直线的起点和终点坐标。
3. 将直线添加到 QGraphicsScene 中。
下面是一个简单的示例代码:
```cpp
QGraphicsLineItem *line = new QGraphicsLineItem(0, 0, 100, 100);
line->setPen(QPen(Qt::red, 2));
scene->addItem(line);
```
其中,第一行创建了一个 QGraphicsLineItem 对象,并设置了起点坐标为 (0, 0),终点坐标为 (100, 100)。第二行设置了直线的颜色和宽度。第三行将直线添加到 QGraphicsScene 中。
相关问题
c++ qt继承QObject和QGraphicsItem画十字点、画直线、画线段,在同一个类中,而且可以通过void wheelEvent(QGraphicsSceneMouseEvent *event)重写来实现鼠标滚轮缩放
可以通过以下代码实现:
```cpp
#include <QtGui>
class CrossLine : public QObject, public QGraphicsItem
{
public:
CrossLine(QGraphicsItem *parent = nullptr) : QObject(parent), QGraphicsItem(parent) {}
QRectF boundingRect() const override
{
return QRectF(-50, -50, 100, 100);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
painter->drawLine(-50, 0, 50, 0);
painter->drawLine(0, -50, 0, 50);
painter->drawLine(-50, -50, 50, 50);
painter->drawLine(-50, 50, 50, -50);
}
void wheelEvent(QGraphicsSceneWheelEvent *event) override
{
if (event->delta() > 0) {
setScale(scale() * 1.1);
} else {
setScale(scale() / 1.1);
}
}
};
```
这个类继承了 QObject 和 QGraphicsItem,实现了 boundingRect 和 paint 函数来绘制十字线和直线段,同时重写了 wheelEvent 函数来实现鼠标滚轮缩放。
QGraphicsItem画五角星 C++
以下是用QGraphicsItem画五角星的C++代码:
```cpp
#include <QGraphicsItem>
#include <QPainter>
class StarItem : public QGraphicsItem
{
public:
StarItem(QGraphicsItem *parent = nullptr) : QGraphicsItem(parent) {}
QRectF boundingRect() const override
{
return QRectF(-50, -50, 100, 100); // 设置包围矩形
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override
{
Q_UNUSED(widget);
painter->setPen(Qt::NoPen); // 不画边框线
painter->setBrush(Qt::yellow); // 填充黄色
// 计算五角星10个顶点的坐标
QPointF points[10];
qreal angle = 2 * 3.1416 / 5; // 每个角的夹角
qreal radius1 = 50; // 外圆半径
qreal radius2 = radius1 * qSin(angle / 2) / qSin(3 * angle / 2); // 内圆半径
for (int i = 0; i < 5; ++i) {
points[2 * i] = QPointF(radius1 * qCos(i * angle - angle / 2), radius1 * qSin(i * angle - angle / 2));
points[2 * i + 1] = QPointF(radius2 * qCos(i * angle + angle / 2), radius2 * qSin(i * angle + angle / 2));
}
painter->drawConvexPolygon(points, 10); // 画五角星
}
};
```
使用`StarItem`类创建一个五角星的QGraphicsItem对象,然后添加到场景中即可。
阅读全文