使用qcustomplots向窗口

时间:2017-01-30 13:01:54

标签: c++ qt widget malloc qcustomplot

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

  

malloc.c:3757:_int_malloc:断言`(无符号长整数)(大小)> =   (无符号长)(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( ...) -function:

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只是一个存储绘图数据的类和更改它的函数。(将两个Qvectors添加到qcustomplot)

AddPlot功能:

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是包含constuctor的子命令:

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

对于这篇长篇文章感到抱歉,但我不知道错误的位置,并且对于som的想法非常高兴。

谢谢!

0 个答案:

没有答案