我需要用 Qt 绘制曲线:用户单击 QGraphicsScene(通过 QGraphicsView),并在用户单击的点之间绘制直线。当用户画完直线(通过点击右键),这组线变成了一条曲线。
为此,我需要使用该QPainterPath::cubicTo(...)
方法并使用QGraphicsScene::addPath(...)
.
问题是我不知道如何计算传递给cubicTo(...)
.
例如,在下图中,用户通过单击点 AB 和 C 绘制了两条灰线。当她单击右键时,我想使用 绘制红线cubicTo(...)
:
我当前的代码仅绘制灰线,因为我已将 、 和 值设置c1
为用户单击的点位置:c2
d1
d2
void Visuel::mousePressEvent(QMouseEvent *event)
{
int x = ((float)event->pos().x()/(float)this->rect().width())*(float)scene()->sceneRect().width();
int y = ((float)event->pos().y()/(float)this->rect().height())*(float)scene()->sceneRect().height();
qDebug() << x << y;
if(event->button() == Qt::LeftButton)
{
path->cubicTo(x,y,x,y,x,y);
}
if(event->button() == Qt::RightButton)
{
if(path == NULL)
{
path = new QPainterPath();
path->moveTo(x,y);
}
else
{
path->cubicTo(x,y,x,y,x,y);
scene()->addPath(*path,QPen(QColor(79, 106, 25)));
path = NULL;
}
}
}