QCustomPlot 被用作在 Qt Creator 中绘图的辅助工具(在编译示例时正确安装)
inline double fn(int T, double x)
{
if (x >= 0)
return T;
return 0;
}
void MainWindow::drawfunc(int valT, int xmin, int xmax) //Вывод функции Хэвисайда
{
double hh =0.01;
int N = (xmax-xmin)/hh;//считается количество точек для массивов координат xmax=10,xmin=-5 итого 1500
QVector<double> x11(N), y11(N); // //Массивы координат точек
int i=0;
for (double x = xmin; x < xmax; x +=hh)
{
x11[i]=x;
y11[i]=fn(valT,x);
i++;
}
ui->widget->clearGraphs();
ui->widget->addGraph();
ui->widget->graph(0)->setData(x11, y11);
// задаем имена осей координат
ui->widget->xAxis->setLabel("x");
ui->widget->yAxis->setLabel("y");
// задаем размеры осей
ui->widget->xAxis->setRange(xmin, xmax);
ui->widget->replot();
}
问题是图没有画出来,抛出异常
ASSERT failure in QVector<T>::operator[]: "index out of range", file ..\..\..\..\Qt\5.3\mingw482_32\include/QtCore/qvector.h, line 385
一步步调试,结果是:
- 一个问题由于QVector
点数为1500(手动计算公式),Qt Creator给出1499。
简单的技巧如
int N = ((xmax-xmin)/hh)+1 или `QVector<double> x11(N+1), y11(N+1)` `i=1`
也抛出异常..
一切正常。由于我从
Visual Studio
那里传输工作代码,我决定查看那里的迭代次数。显示
1501
。Inqt creator
i
也显示了,1501
但点数组本身QVector
是1499
. 结果,增加了获取点数的公式+2
结果
点数与迭代次数一致,程序有效。