2

我正在尝试制作一个包含多个小部件的小部件,每个小部件都有一个 QCustomplot 和一些绘图数据(QLabel 和 QPushbuttons)。此小部件从带有parent=0. 我用一个函数添加了子小部件,但如果它被使用超过一次,它会抛出一个错误:

malloc.c:3757: _int_malloc: 断言 `(unsigned long) (size) >= (unsigned long) (nb)' 失败。

所以继承人的代码,这导致了这一点:

打开小部件,它应该包含子小部件:

Zeitdatenfenster = new Plotfenster();
Zeitdatenfenster->getZeitData(ausgewaehlteKanaele, *messdaten, double(Anfangszeiteingabe->value()), double(Endzeiteingabe->value()));
Zeitdatenfenster->show();

Zeitdatenfenster 在 MainWindow 类头中: Plotfenster* Zeitdatenfenster;

构造函数:

Plotfenster::Plotfenster(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Plotfenster)
{
    ui->setupUi(this);
    counter=0;
}

getZeitData( ...)-功能:

void Plotfenster::getZeitData(const std::vector<bool>& Kanalauswahl, const Messdatenverwaltung& messdaten, double Anfangszeit, double Endzeit){
    setWindowTitle("Time Data");
    int zahler=0;
    for(int i = 0; i<Kanalauswahl.size();i++){
         if(Kanalauswahl[i]){
                Ploteigenschaften* kanalzeit = new Ploteigenschaften();
                std::cout << kanalzeit << std::endl;
                geplotteteDatenInhalt.push_back(kanalzeit);
                geplotteteDatenInhalt[zahler]->setZeitData(messdaten, i,Anfangszeit,Endzeit);
                addPlot(geplotteteDatenInhalt[zahler],zahler);
                zahler++;
          }
    }
}

geplotteteDatenInhaltstd::vector<Ploteigenschaften*>, addPlot()是创建子小部件的函数。Ploteigenschaften只是一个类,它存储作为 plottet 的数据和更改它的函数。(将两个 Qvector 添加到 qcustomplot 中)

添加绘图功能:

void Plotfenster::addPlot(Ploteigenschaften* plotDaten, int zahler ){
       Plot* aktuellerPlot = new Plot(plotDaten, this);
       geplottetes.push_back(aktuellerPlot);
       ui->plotcontainer->addWidget(geplottetes[zahler],counter);
       counter++;
}

Plot 是包含构造函数的子窗口:

Plot::Plot(Ploteigenschaften* plotDatens, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Plot)
{
    ui->setupUi(this);
    ui->plotGrid->setColumnStretch(1, 3);
    ui->plotGrid->setHorizontalSpacing(20);
    derPlot = new QCustomPlot(this);
    this->plotDaten = plotDatens;
    this->Datensetzten();
}

程序在 QCustomplot 构造函数处崩溃。在 Datensetzten 中指定了情节:

void Plot::Datensetzten(){
    this->setInfoText();
    this->setPlot();
    this->setSaveButton();
}
void Plot::setPlot(){
    derPlot->addGraph();
    derPlot->graph(0)->setData(plotDaten->xDaten,plotDaten->yDaten);
    derPlot->xAxis->setRange(plotDaten->xUntereGrenze,plotDaten->xObereGrenze);
    derPlot->yAxis->setRange(plotDaten->yMinimum-std::abs(plotDaten->yMinimum)*0.01,plotDaten->yMaximum+std::abs(plotDaten->yMaximum)*0.01);
    derPlot->xAxis->setLabel(plotDaten->BeschriftungxAchse);
    derPlot->yAxis->setLabel(plotDaten->BeschriftungyAchse);
    derPlot->xAxis2->setVisible(true);
    derPlot->xAxis2->setTickLabels(false);
    derPlot->yAxis2->setVisible(true);
    derPlot->yAxis2->setTickLabels(false);
    ui->plotGrid->addWidget(derPlot,0,1,2,1);
    derPlot->show();
}

很抱歉发了这么长的帖子,但我不知道错误在哪里,很高兴有一些想法。

谢谢!

4

0 回答 0