0

我正在尝试在 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;
}

有什么问题?以及如何解决这个错误?

4

1 回答 1

0

我不知道你是否还需要这方面的帮助,但如果有人需要,我会分享我的解决方案。

首先,您需要确保QApplication已声明并正常工作(不要与 混淆QGuiApplication)。

其次,如果您需要模块化图表(就像您通过定义Test类并在其中定义图表属性所做的那样),您需要在主窗口小部件的构造函数中初始化QChart(或包含初始化的函数或构造函数)。QChart在 Windows 中,这种方法可以解决您的问题:

在 mainwindow.h 中:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
   Test testObject;
   //other stuff
}

在主窗口.cpp

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow)
{

    testObject = Test();
    //other stuff
}

请注意,MainWindow 是 Windows 中默认的 QMainWindow 小部件类。

我不确定,但问题的根源可能Q_DISABLE_COPY(QChart)在 qchart.h 文件中。它需要抛出编译时错误,而是在运行时导致分段错误。

于 2020-12-31T23:18:11.987 回答