QChart 初始化导致 EXCEPTION VIOLATION
QChart initialization causes an EXCEPTION VIOLATION
当我初始化 QChart 时,它导致未处理的异常 EXCEPTION_ACCESS_VIOLATION。当其他人尝试初始化 QChart 时,我在 Qt 论坛上看到了同样的异常违规错误,但是他们的建议并没有解决我的问题。他们的建议是确保在 Visual Studio 的项目属性中,在 C++/C > General 中包含必要的 Qt 文件夹(即 \include\QtCharts),并在 Linker > Input 中包含必要的 .lib包含文件(\lib\Qt5Charts.lib)。我也在使用其他模块,并且这些模块已正确包含。我正在构建 Release。
以下是我的代码的清理版本,仅包含绝对必要的内容。实际的 .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 中的任何内容都没有红色波浪线下划线。
您的问题是您在创建 QApplication 实例之前创建了 QChart。 QApplication 的文档指出:由于 QApplication 对象进行了如此多的初始化,因此必须在创建与用户界面相关的任何其他对象之前创建它。
https://doc.qt.io/qt-5/qapplication.html#details
要修复,请将 QApplication a(myargc, myargv);
行移动到 QChart *chart = new QChart();
上方
当我初始化 QChart 时,它导致未处理的异常 EXCEPTION_ACCESS_VIOLATION。当其他人尝试初始化 QChart 时,我在 Qt 论坛上看到了同样的异常违规错误,但是他们的建议并没有解决我的问题。他们的建议是确保在 Visual Studio 的项目属性中,在 C++/C > General 中包含必要的 Qt 文件夹(即 \include\QtCharts),并在 Linker > Input 中包含必要的 .lib包含文件(\lib\Qt5Charts.lib)。我也在使用其他模块,并且这些模块已正确包含。我正在构建 Release。
以下是我的代码的清理版本,仅包含绝对必要的内容。实际的 .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 中的任何内容都没有红色波浪线下划线。
您的问题是您在创建 QApplication 实例之前创建了 QChart。 QApplication 的文档指出:由于 QApplication 对象进行了如此多的初始化,因此必须在创建与用户界面相关的任何其他对象之前创建它。
https://doc.qt.io/qt-5/qapplication.html#details
要修复,请将 QApplication a(myargc, myargv);
行移动到 QChart *chart = new QChart();