qt中qlist中如何去掉坐标相同的点
时间: 2024-10-23 16:06:21 浏览: 26
在Qt中,`QList`通常用于存储列表数据,如果你想要从坐标列表中移除所有坐标相同的点,可以创建一个`std::map`或者`QMap`(Qt中的哈希映射),将坐标作为键,然后遍历`QList`,如果新加入的坐标已经存在于映射中,则表示是重复的,可以跳过。
下面是一个简单的示例:
```cpp
#include <QList>
#include <QMap>
// 假设你有一个包含QPointF的QList
QList<QPointF> pointList;
// 使用QMap存储唯一的坐标
QMap<QPointF, bool> uniquePoints;
for (const QPointF& point : pointList) {
if (!uniquePoints.contains(point)) { // 如果坐标不存在于映射中
uniquePoints.insert(point, true); // 添加到映射并标记为唯一
// 或者你可以直接添加到新的列表,如果需要保留原始顺序
newPointList << point;
}
}
// 现在newPointList就是去掉了重复坐标的列表
```
相关问题
qt已知点坐标画图,不在paintevent中
如果你已知点的坐标,可以在QWidget的派生类中重载mousePressEvent方法,获取鼠标点击时的坐标点。然后在该派生类中再添加一个public的绘图函数,用来绘制你想要的图形,例如:
```cpp
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr);
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void drawPoint(QPoint point); // 添加的绘图函数
private:
QList<QPoint> m_points; // 已知点的坐标集合
};
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// 初始化已知点坐标
m_points.append(QPoint(100, 100));
m_points.append(QPoint(200, 200));
m_points.append(QPoint(300, 100));
}
void MyWidget::paintEvent(QPaintEvent *event)
{
// 这里可以绘制一些其他的元素
// ...
// 绘制已知点
QPainter painter(this);
painter.setPen(Qt::red);
for (const auto &point : m_points) {
painter.drawPoint(point);
}
}
void MyWidget::mousePressEvent(QMouseEvent *event)
{
drawPoint(event->pos()); // 鼠标点击时绘制一个点
}
void MyWidget::drawPoint(QPoint point)
{
// 绘制一个点
QPainter painter(this);
painter.setPen(Qt::blue);
painter.drawPoint(point);
}
```
在上述代码中,我们定义了一个绘图函数`drawPoint`,用来绘制一个点,然后在重载的`mousePressEvent`方法中,获取鼠标点击时的坐标点,并调用`drawPoint`函数进行绘制。在重载的`paintEvent`方法中,我们可以绘制一些其他的元素,同时也绘制已知的点。
qt存储一段画上的坐标点
在Qt中,您可以使用QPainter和QPen来绘制线条和点。为了存储一段画上的坐标点,您可以使用一个QList或QVector来存储每个点的坐标值。
以下是一个示例代码,演示如何存储一段坐标点并在窗口中绘制:
```cpp
#include <QPainter>
#include <QPen>
#include <QList> // 或者 #include <QVector>
class MyWidget : public QWidget {
public:
MyWidget(QWidget* parent = nullptr) : QWidget(parent) {}
// 存储坐标点
QList<QPoint> points; // 或者 QVector<QPoint> points;
void paintEvent(QPaintEvent*) override {
QPainter painter(this);
QPen pen(Qt::red, 2);
painter.setPen(pen);
// 绘制线条
for (int i = 0; i < points.size() - 1; ++i) {
painter.drawLine(points[i], points[i + 1]);
}
// 绘制点
pen.setColor(Qt::blue);
painter.setPen(pen);
for (const auto& point : points) {
painter.drawPoint(point);
}
}
};
```
在上述示例代码中,我们定义了一个名为points的QList或QVector,用于存储坐标点。在paintEvent函数中,我们使用QPainter和QPen绘制线条和点,并使用存储的坐标点进行绘制。当需要添加新点时,只需要将点的坐标添加到points列表中即可。
阅读全文