QT C++项目,获取数据后实时显示到界面上绘制成线。不使用QT信号槽。请列举详细代码
时间: 2023-12-29 07:03:00 浏览: 253
使用C++ QT模仿企业微信界面项目源码,用于学习QWidget的使用,含绘制,布局,信号,事件,重写,多线程,qss等技术
以下是一个简单的示例代码,实现了从数据源获取数据并实时显示到界面上,并将数据绘制成一条折线。该示例使用了QT中的QTimer类来定时获取数据并更新界面。
```
#include <QtGui>
#include <QtCore>
class RealtimePlot : public QWidget
{
Q_OBJECT
public:
RealtimePlot(QWidget *parent = nullptr)
: QWidget(parent)
{
setFixedSize(400, 300);
m_data.resize(100);
// 定时器用于更新数据和界面
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &RealtimePlot::updateData);
m_timer->start(100); // 每秒钟更新一次
// 设置画笔和背景色
m_pen.setColor(Qt::red);
m_backgroundColor = Qt::white;
}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.fillRect(rect(), m_backgroundColor);
// 计算折线的起点和终点
QPointF startPoint(0, height() - m_data[0]);
QPointF endPoint;
for (int i = 1; i < m_data.size(); ++i) {
endPoint.setX(i * width() / m_data.size());
endPoint.setY(height() - m_data[i]);
painter.drawLine(startPoint, endPoint);
startPoint = endPoint;
}
}
private slots:
void updateData()
{
// 从数据源获取最新的数据
double newData = qSin(m_index++ / 10.0) * height() / 2 + height() / 2;
m_data.append(newData);
m_data.pop_front();
// 更新界面
update();
}
private:
QTimer *m_timer;
QVector<double> m_data;
QPen m_pen;
QColor m_backgroundColor;
int m_index = 0;
};
```
在使用时,可以将该类作为一个Widget添加到自己的QT项目中即可。
阅读全文