QLineSeries не отображается при работе с числами <1e-14 - PullRequest
0 голосов
/ 17 июня 2019

При построении графика ряда линий в небольшом диапазоне с использованием библиотеки QtChart (например, между 0 и 1e-15) ряд линий, по-видимому, не визуализируется. Использование больших чисел с одинаковым точным кодом прекрасно работает.

Я пытался свести мой код, чтобы он был максимально простым, чтобы найти ошибки, которые я делал, но я не могу их найти. Я подозреваю, что это может быть ошибкой в ​​Qt, но я публикую здесь сообщение на случай, если что-то пропустил, прежде чем отправлять отчет об ошибке.

Мне также не удалось найти в Интернете никакой информации о людях, испытывающих подобные ошибки, но это может быть просто признаком того, что мое Google-фу слабое.

Первоначально я столкнулся с этой ошибкой, используя PyQt5, но воссоздал ее в C ++, чтобы убедиться, что это не специфическая ошибка PyQt5.

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QLegend>
#include <QtCharts/QValueAxis>

QT_CHARTS_USE_NAMESPACE

#define FACTOR 1e-13

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLineSeries *lineseries = new QLineSeries();
    lineseries->setName("series");
    lineseries->setUseOpenGL(true);

    for (double i = 0.0; i < 10.0; i += 1.0)
        lineseries->append(QPointF(i*FACTOR, i * FACTOR));

    QChart *chart = new QChart();
    chart->addSeries(lineseries);
    chart->setTitle("Line example");

    QValueAxis *axisX = new QValueAxis();
    chart->setAxisX(axisX, lineseries);

    QValueAxis *axisY = new QValueAxis();
    chart->setAxisY(axisY, lineseries);
    axisY->setRange(0.0, 9.0*FACTOR);

    axisX->setLabelFormat("%.3E");
    axisY->setLabelFormat("%.3E");

    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(840, 900);
    window.show();

    return a.exec();
}

Запустив прикрепленный код, я ожидаю увидеть линейный ряд линий, отображаемый на графике, но я не вижу ничего визуализированного.

Изменение константы FACTOR на что-то> = 1e-12 приведет к правильному отображению ряда линий.

...