C++Qt不用Qcustomplot的库绘制幅度响应曲线和频率响应曲线
时间: 2023-07-11 22:37:02 浏览: 170
Qt基于Qcustomplot画曲线图
在C++Qt中,可以使用内置的绘图功能来绘制幅度响应曲线和频率响应曲线。下面给出一个简单的示例代码,演示如何在Qt窗口中绘制一个幅度响应曲线和频率响应曲线。
```cpp
#include <QtGui>
#include <cmath>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 绘制坐标轴
painter.drawLine(50, height() - 50, width() - 50, height() - 50);
painter.drawLine(50, height() - 50, 50, 50);
// 绘制幅度响应曲线
painter.setPen(QPen(Qt::red, 2));
for (int i = 0; i < width() - 100; i++)
{
double x = (double)i / (width() - 100);
double y = 20 * std::log10(std::sqrt(x * x + 0.1) / std::sqrt(x * x + 1));
painter.drawPoint(50 + i, height() - 50 - y * 10);
}
// 绘制频率响应曲线
painter.setPen(QPen(Qt::green, 2));
for (int i = 0; i < width() - 100; i++)
{
double x = (double)i / (width() - 100);
double y = std::atan2(2 * x, x * x + 1);
painter.drawPoint(50 + i, height() - 50 - y * 10);
}
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
```
在这个示例中,我们自定义了一个QWidget子类MyWidget,并实现了它的paintEvent函数。在paintEvent中,我们创建了一个QPainter对象,并设置了它的抗锯齿渲染属性。然后,我们绘制了坐标轴,并使用两个for循环分别绘制了幅度响应曲线和频率响应曲线。在每个循环中,我们计算了相应的函数值,并使用drawPoint函数在相应的坐标上绘制一个点。最后,我们创建了MyWidget对象并显示它。运行程序后,会在窗口中看到一个幅度响应曲线和频率响应曲线。
阅读全文