【发布时间】:2020-04-08 10:10:37
【问题描述】:
我正在尝试在 ubuntu 中使用 Qchart。运行以下代码时出现分段错误(sigsegv)错误。创建Qchart对象时出现此错误。
头文件:
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
using namespace QtCharts;
class Test
{
public:
Test();
~Test();
void Run();
private:
QLineSeries *series;
QChart *chart;
QChartView *chartView;
};
cpp 文件:
#include "test.h"
Test::Test()
{
series = new QLineSeries();
chart = new QChart();
chartView = new QChartView(chart);
}
void Test::Run(){
series->append(0, 6);
series->append(2, 4);
series->append(3, 8);
series->append(7, 4);
series->append(10, 5);
chart->legend();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("Simple line chart example");
chartView->setRenderHint(QPainter::Antialiasing);
chartView->show();
}
Test::~Test(){
delete series;
delete chart;
delete chartView;
}
有什么问题?以及如何解决这个错误?
【问题讨论】:
-
请提供minimal reproducible example,说明您如何使用显示的代码,并提供有关似乎导致段错误的行的一些信息。需要注意的一点是,当使用
chartView = new QChartView(chart)时,chartView拥有chart的所有权。这意味着delete chart后跟delete chartView将触发双重删除,因此会触发未定义的行为。 -
在运行
Test::run()之前是否初始化了QGuiApplication?如果你不这样做,你会得到这个段错误。如果你这样做了,你会得到另一个,我想一些小部件需要先设置或其他东西.. -
@G.M.感谢您对最小可重复性的提示。但我不明白你的笔记。你能解释一下吗?
-
什么通用汽车。就是说你的析构函数有错误。
QChartView拥有其QChart的所有权(图形视图/场景除外),因此您不应删除图表。但是,您的段错误已经发生在构造函数中。 -
@ypnos,谢谢。你是对的,我的段错误发生在构造函数中。另外,我在“Test::run()”之前使用了“QGuiApplication”,但没有解决。
标签: c++ qt segmentation-fault qchart