可以使用QPainter和QTimer来实现动态频率图功能。
首先,定义一个QTimer对象,并设置定时器的时间间隔。然后,在定时器的timeout()信号中编写需要执行的代码,例如更新数据并重绘界面。接着,使用QPainter在QWidget上绘制频率图。
以下是一个简单示例代码:
#include <QWidget>
#include <QTimer>
#include <QVector>
#include <QPainter>
class MyWidget : public QWidget {
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent), m_timerInterval(100), m_dataSize(50) {
// 创建定时器
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(updateData()));
// 设置定时器时间间隔
m_timer->start(m_timerInterval);
// 初始化数据
for (int i = 0; i < m_dataSize; ++i) {
m_data.append(qrand() % 100);
}
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
// 计算每个柱状图的宽度和高度
int barWidth = width() / m_dataSize;
int barHeight = height() / 100;
// 绘制每个柱状图
for (int i = 0; i < m_dataSize; ++i) {
QRect rect(i * barWidth, height(), barWidth, -m_data[i] * barHeight);
painter.fillRect(rect, Qt::red);
}
}
private slots:
void updateData() {
// 在这里编写更新数据的代码
m_data.pop_front();
m_data.append(qrand() % 100);
// 刷新界面
update();
}
private:
int m_timerInterval;
int m_dataSize;
QVector<int> m_data;
QTimer *m_timer;
};
在paintEvent()函数中使用QPainter绘制柱状图。每次定时器触发timeout()信号时都会更新一次数据并刷新界面,以实现动态效果。