如何在Qt中用鼠标将直线转换为曲线
How to transform a line into a curve with the mouse in Qt?
我的一个项目遇到了麻烦。我试图在渲染区域中为汽车(街道)绘制一条路线,该路线可以包含直线和曲线。为此,我想主要画线,然后用鼠标选择一条线,并通过移动鼠标将其转换为曲线(一条曲线,它可以窥视鼠标选择的线上的点)。到目前为止,我只能在渲染区域中绘制点,并在这些点之间自动生成线,但我不确定如何用鼠标将线转换为曲线。
到目前为止,我的代码是:
renderarea.cpp:
RenderArea::RenderArea(QWidget *parent)
: QWidget(parent)
{
setBackgroundRole(QPalette::Base);
setAutoFillBackground(true);
}
void RenderArea::mousePressEvent(QMouseEvent *e)
{
point = e->pos();
updateList(point);
this->update();
}
void RenderArea::updateList(const QPoint& p)
{
Point point;
point.point = p;
list.append(point);
if (list.count()>1)
lineAdded(point);
}
void RenderArea::lineAdded(const Point &p)
{
Line temp;
temp.endPoint = p;
temp.startPoint = list.at(list.count() - 2);
lines.append(temp);
}
void RenderArea::paintEvent(QPaintEvent * /* event */)
{
int i;
QPainter painter(this);
painter.setPen(QPen(Qt::black,2));
for (i = 0; i < list.size(); ++i)
painter.drawPoint(list[i].point);
for (i = 0; i < lines.size(); ++i)
painter.drawLine(lines[i].startPoint.point, lines[i].endPoint.point);
}
希望你能帮我。提前谢谢。
有一些UI(右键单击?)可以将线段更改为Besier曲线。然后通过拖动控制柄来控制曲线的形状(您需要提供)。再次单击鼠标右键可将曲线更改回线段。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将 openCv 中的曲线从 ROI 转换为帧
- 如何将二次贝塞尔曲线代码转换为三次贝塞尔曲线
- c++.将定义了2个点的绘图贝塞尔曲线调用转换为定义了3个点的调用
- 如何在Qt中用鼠标将直线转换为曲线