全局变量QVector<QPointF> GNpoints;,一个函数每200ms向GNpoints添加1个点,另一个函数同时根据GNPoints依次连接绘制折线
时间: 2023-11-27 17:54:21 浏览: 138
QtChart绘制折线图
可以使用信号与槽来实现这个功能。
首先在类的头文件中声明一个`QTimer`成员变量,用来定时添加点:
```cpp
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = nullptr);
private:
QTimer *m_timer;
QVector<QPointF> m_points;
signals:
void addPoint(QPointF point);
public slots:
void timerTimeout();
};
```
然后在构造函数中初始化`QTimer`并启动它:
```cpp
MyClass::MyClass(QObject *parent)
: QObject(parent)
{
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &MyClass::timerTimeout);
m_timer->start(200); // 每200ms触发一次timeout信号
}
```
在`timerTimeout`槽函数中添加新的点,并发送`addPoint`信号:
```cpp
void MyClass::timerTimeout()
{
QPointF point(qrand() % 100, qrand() % 100); // 生成随机坐标
m_points.append(point); // 添加到点集中
emit addPoint(point); // 发送信号
}
```
在另一个函数中连接`addPoint`信号,并根据点集绘制折线:
```cpp
void drawLine(QVector<QPointF> points)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 2));
for (int i = 1; i < points.size(); ++i) {
painter.drawLine(points[i - 1], points[i]); // 依次连接每两个相邻的点
}
}
// 在类的构造函数中连接信号与槽
connect(this, &MyClass::addPoint, this, &MyClass::drawLine);
```
这样,每200ms会自动添加一个新的点,并且折线会随着点的增加而不断绘制。注意,在`drawLine`函数中使用`QPainter`对象来进行绘制,需要在相应的`paintEvent`函数中调用`drawLine`函数。
阅读全文