#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();