QCustomPlot Discussion and Comments

Embedding qcustomplot in scrollBarReturn to overview
August 23, 2023, 13:28
by Roman

Hello everyone! I have a special class for building graphs, but when i want to add it on scrollArea, i have some issues. Graphs are very small and if i want to print 50 graphs, i will see something like that: "They are pressed against each other and nothing is visible, but i want each graph to be with normal height and stretch across the entire width of the screen.


Graph class

#include "graphbuilder.h"
GraphBuilder::GraphBuilder(QWidget* parent)
 : QWidget(parent)
{
 _customPlot = new QCustomPlot(this);
}
GraphBuilder::~GraphBuilder()
{
 delete _customPlot;
}
void GraphBuilder::build(QMap<QString, QVector<double>>& position, const QString& header, const QVector<QTime>& time)
{
 QVector<double> timeData;
 QVector<double> positionData;
 for (int i = 0; i < time.size(); ++i)
 {
 timeData.append(time[i].msecsSinceStartOfDay());
 }
 positionData = position[header];
 _customPlot->addGraph();
 _customPlot->graph()->setData(timeData, positionData);
 _customPlot->graph()->setPen(QPen(QColor("green")));
 QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);
 dateTicker->setDateTimeFormat("hh:mm:ss.zzz");
 _customPlot->xAxis->setTicker(dateTicker);
 _customPlot->xAxis->setLabel("Time");
 _customPlot->yAxis->setLabel("Position");
 QCPTextElement *title = new QCPTextElement(_customPlot);
 title->setText(header);
 title->setFont(QFont("sans", 12, QFont::Bold));
 _customPlot->plotLayout()->insertRow(0);
 _customPlot->plotLayout()->addElement(0, 0, title);
 _customPlot->setInteraction(QCP::iRangeZoom, true);
 _customPlot->setInteraction(QCP::iRangeDrag, true);
 _customPlot->setFixedSize(1200, 900);
// _customPlot->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
 _customPlot->rescaleAxes();
 _customPlot->replot();
}


void MainWindow::printGraph()
{
 QMap<QString, QVector<double>> position = controller->getPosition();
 // qDebug() << position;
 QStringList headers = controller->getHeaders();
 // qDebug() << headers;
 QVector<QTime> time = controller->getTime();
 // qDebug() << time;
 for (int i = 0; i < 50; ++i)
 {
 GraphBuilder* graph = new GraphBuilder();
 graph->build(position, headers[3], time);
 ui->graphic->addWidget(graph);
 }
}

AltStyle によって変換されたページ (->オリジナル) /