Инициализация QChart вызывает НАРУШЕНИЕ ИСКЛЮЧЕНИЯ

#c #qt #qchart

Вопрос:

Когда я инициализирую QChart, это вызывает необработанное исключение EXCEPTION_ACCESS_VIOLATION. Я видел ту же ошибку нарушения исключений на форумах Qt, когда другие пытаются инициализировать QChart, однако их предложения не решают проблему для меня. Их предложения состоят в том, чтобы убедиться, что в свойствах проекта Visual Studio, что в C /C > Общие включены необходимые папки Qt (которые являются includeQtCharts) и что в компоновщике >> Включены необходимые файлы .lib (которые являются libQt5Charts.lib). Я также использую другие модули, и они включены должным образом. Я создаю Релиз.

Ниже приведена очищенная версия моего кода, содержащая только то, что абсолютно необходимо. Фактический файл .cpp намного больше.

 #include <QPainter>
#include <QPen>
#include <QApplication>
#include <QMainWindow>
#include <QtCharts> // for QScatterPlot
#include <QChartView>
#include <iostream>

int Graphics::OpenGraphic()
{
    char* myargv[1];
    int myargc = 1;
    myargv[0] = strdup("");

    QScatterSeries* redSeries = new QScatterSeries;
    redSeries->append(0, 6);
    redSeries->append(2, 4);
    redSeries->setColor(Qt::red);

    QScatterSeries* blueSeries = new QScatterSeries;
    blueSeries->append(3, 8);
    blueSeries->append(7, 4);
    blueSeries->append(10, 5);
    blueSeries->setColor(Qt::blue);

    QChart* chart = new QChart(); // This causes an Unhandled exception EXCEPTION_ACCESS_VIOLATION at 0x00007FFA1FE24CBC

    chart->addSeries(redSeries);
    chart->addSeries(blueSeries);

    QApplication a(myargc, myargv);
    QMainWindow w;

    //w.setCentralWidget(chartView);
    w.resize(400, 300);

    w.show();

    return a.exec();
}
 

Любое понимание ценится. Это, похоже, сложный вопрос.

правка: Также нет красных закорючек, подчеркивающих QChart или что-либо в VS.

Комментарии:

1. Я думаю, что проблема в том, что при создании QChart нет экземпляра QApplication. Сначала создайте экземпляр QApplication.

2. @drescherjm Да, это было именно то, что было… Спасибо… Если вы хотите, дайте официальный ответ, и я приму ваш как правильный. Еще раз спасибо!

Ответ №1:

Ваша проблема заключается в том, что вы создали QChart до того, как создали экземпляр QApplication. Документация по QApplication гласит: Поскольку объект QApplication выполняет так много инициализации, он должен быть создан до создания любых других объектов, связанных с пользовательским интерфейсом.

https://doc.qt.io/qt-5/qapplication.html#details

Чтобы исправить, переместите QApplication a(myargc, myargv); линию выше QChart *chart = new QChart();