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

上方