void MainWindow::genItemBracket() { resetPlot(); QCPItemBracket *bracket = new QCPItemBracket(customPlot); customPlot->addItem(bracket); bracket->left->setCoords(-0.2, 0.35); bracket->right->setCoords(1.2, 0.65); bracket->setLength(12); labelItemAnchors(bracket, 8, true, false); customPlot->savePng(dir.filePath("QCPItemBracket.png"), 230, 160); customPlot->clearItems(); // generate image of multiple bracket lengths/styles: for (int i=0; i<4; ++i) { QCPItemBracket *bracket = new QCPItemBracket(customPlot); customPlot->addItem(bracket); bracket->setStyle(QCPItemBracket::bsCalligraphic); bracket->left->setCoords(-0.35+i*0.18, 0.95); bracket->right->setCoords(-0.15+i*0.18, 0.05); bracket->setLength(10+i*5); labelItemAnchors(bracket, 0, true, false); QCPItemText *label = new QCPItemText(customPlot); customPlot->addItem(label); label->setText(QString::number(bracket->length())); label->position->setParentAnchor(bracket->right); label->position->setCoords(-5, 20); label->setFont(QFont(font().family(), 9)); } for (int i=0; i<4; ++i) { QCPItemBracket *bracket = new QCPItemBracket(customPlot); customPlot->addItem(bracket); bracket->setStyle(QCPItemBracket::bsSquare); bracket->left->setCoords(0.55+i*0.18, 0.95); bracket->right->setCoords(0.75+i*0.18, 0.05); bracket->setLength(10+i*5); labelItemAnchors(bracket, 0, true, false); QCPItemText *label = new QCPItemText(customPlot); customPlot->addItem(label); label->setText(QString::number(bracket->length())); label->position->setParentAnchor(bracket->right); label->position->setCoords(-5, 20); label->setFont(QFont(font().family(), 9)); } QCPItemText *topLabel1 = new QCPItemText(customPlot); customPlot->addItem(topLabel1); topLabel1->setText("bsCalligraphic"); topLabel1->position->setCoords(-0.05, 1.1); topLabel1->setFont(QFont(font().family(), 10)); QCPItemText *topLabel2 = new QCPItemText(customPlot); customPlot->addItem(topLabel2); topLabel2->setText("bsSquare"); topLabel2->position->setCoords(0.85, 1.1); topLabel2->setFont(QFont(font().family(), 10)); customPlot->savePng(dir.filePath("QCPItemBracket-length.png"), 450, 200); }
void MainWindow::genMarginGroup() { resetPlot(); customPlot->plotLayout()->clear(); customPlot->plotLayout()->addElement(0, 0, new QCPAxisRect(customPlot)); customPlot->plotLayout()->addElement(0, 1, new QCPAxisRect(customPlot)); customPlot->plotLayout()->addElement(1, 0, new QCPAxisRect(customPlot)); customPlot->plotLayout()->addElement(1, 1, new QCPAxisRect(customPlot)); foreach (QCPAxisRect *r, customPlot->axisRects()) r->axis(QCPAxis::atBottom)->setTickLabels(false); QCPMarginGroup *marginGroup = new QCPMarginGroup(customPlot); customPlot->axisRect(0)->setMarginGroup(QCP::msLeft, marginGroup); customPlot->axisRect(2)->setMarginGroup(QCP::msLeft, marginGroup); customPlot->axisRect(0)->axis(QCPAxis::atLeft)->setRange(0, 1300); customPlot->axisRect(1)->axis(QCPAxis::atLeft)->setRange(0, 1300); customPlot->axisRect(0)->axis(QCPAxis::atLeft)->setLabel("y"); customPlot->axisRect(1)->axis(QCPAxis::atLeft)->setLabel("y"); customPlot->plotLayout()->setAutoMargins(QCP::msLeft|QCP::msRight|QCP::msBottom); customPlot->plotLayout()->setMargins(QMargins(0, 25, 0, 0)); QFont textFont; textFont.setBold(true); QCPItemText *leftCaption = new QCPItemText(customPlot); customPlot->addItem(leftCaption); leftCaption->position->setType(QCPItemPosition::ptViewportRatio); leftCaption->setClipToAxisRect(false); leftCaption->position->setCoords(0.25, 0); leftCaption->setPositionAlignment(Qt::AlignTop|Qt::AlignHCenter); leftCaption->setText("left sides in margin group"); leftCaption->setFont(textFont); QCPItemText *rightCaption = new QCPItemText(customPlot); customPlot->addItem(rightCaption); rightCaption->position->setType(QCPItemPosition::ptViewportRatio); rightCaption->position->setCoords(0.75, 0); rightCaption->setClipToAxisRect(false); rightCaption->setPositionAlignment(Qt::AlignTop|Qt::AlignHCenter); rightCaption->setText("no margin group"); rightCaption->setFont(textFont); QCPItemLine *splitter = new QCPItemLine(customPlot); splitter->start->setType(QCPItemPosition::ptViewportRatio); splitter->start->setCoords(0.5, 0); splitter->end->setType(QCPItemPosition::ptViewportRatio); splitter->end->setCoords(0.5, 1); splitter->setClipToAxisRect(false); splitter->setPen(QPen(Qt::gray, 0, Qt::DashLine)); customPlot->savePng(dir.filePath("QCPMarginGroup.png"), 400, 400); }
void MainWindow::genLineEnding() { resetPlot(); QMetaEnum endingStyleEnum = QCPLineEnding::staticMetaObject.enumerator(QCPLineEnding::staticMetaObject.indexOfEnumerator("EndingStyle")); double offset = -0.2; double step = 1.4/((double)endingStyleEnum.keyCount()-1); for (int i=0; i<endingStyleEnum.keyCount(); ++i) { QCPLineEnding ending(static_cast<QCPLineEnding::EndingStyle>(endingStyleEnum.value(i))); QString endingName(endingStyleEnum.key(i)); if (ending.style() == QCPLineEnding::esSkewedBar) ending.setInverted(true); QCPItemLine *line = new QCPItemLine(customPlot); line->setPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::FlatCap)); customPlot->addItem(line); line->start->setCoords(offset+i*step-0.1, -0.2); line->end->setCoords(offset+i*step, 0.5); line->setHead(ending); QCPItemText *text = new QCPItemText(customPlot); customPlot->addItem(text); text->position->setParentAnchor(line->end); text->position->setCoords(8, -15-(i%2)*15); text->setFont(QFont(font().family(), 8)); text->setText(endingName); } customPlot->savePng(dir.filePath("QCPLineEnding.png"), 500, 100); }
void MainWindow::genItemText() { resetPlot(); QCPItemText *text = new QCPItemText(customPlot); customPlot->addItem(text); text->position->setCoords(0.5, 0.5); text->setText("QCustomPlot\nWidget"); text->setFont(QFont(font().family(), 24)); text->setRotation(12); text->setBrush(defaultBrush); labelItemAnchors(text); customPlot->savePng(dir.filePath("QCPItemText.png"), 300, 170); }
void MainWindow::labelItemAnchors(QCPAbstractItem *item, double fontSize, bool circle, bool labelBelow) { QList<QCPItemAnchor*> anchors = item->anchors(); for (int i=0; i<anchors.size(); ++i) { if (circle) { QCPItemEllipse *circ = new QCPItemEllipse(item->parentPlot()); item->parentPlot()->addItem(circ); circ->topLeft->setParentAnchor(anchors.at(i)); circ->bottomRight->setParentAnchor(anchors.at(i)); circ->topLeft->setCoords(-4, -4); circ->bottomRight->setCoords(4, 4); QPen p(Qt::blue, 0, Qt::CustomDashLine); #if (QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)) // Qt 4.8 changed the meaning of this completely... p.setDashPattern(QVector<qreal>()<<2<<1); #else p.setDashPattern(QVector<qreal>()<<1<<3); #endif circ->setPen(p); if (dynamic_cast<QCPItemPosition*>(anchors.at(i))) { QCPItemEllipse *circ2 = new QCPItemEllipse(item->parentPlot()); item->parentPlot()->addItem(circ2); circ2->topLeft->setParentAnchor(anchors.at(i)); circ2->bottomRight->setParentAnchor(anchors.at(i)); circ2->topLeft->setCoords(-2.5, -2.5); circ2->bottomRight->setCoords(2.5, 2.5); circ2->setPen(Qt::NoPen); circ2->setBrush(Qt::blue); } } if (fontSize > 0) { QCPItemText *label = new QCPItemText(item->parentPlot()); item->parentPlot()->addItem(label); label->setFont(QFont(font().family(), fontSize)); label->setColor(Qt::blue); label->setText(QString("%2 (%1)").arg(i).arg(anchors.at(i)->name())); label->position->setParentAnchor(anchors.at(i)); if (circle) label->position->setCoords(0, fontSize*2*(labelBelow?1:-1)); else label->position->setCoords(0, 0); label->setTextAlignment(Qt::AlignCenter); } } }
void MainWindow::genAxisRectSpacingOverview() { resetPlot(); customPlot->xAxis->setRange(-0.4, 1.4); customPlot->yAxis->setRange(100, 900); customPlot->xAxis->setVisible(true); customPlot->yAxis->setVisible(true); customPlot->axisRect()->setupFullAxesBox(); customPlot->xAxis->setTickLabels(false); customPlot->axisRect()->setAutoMargins(QCP::msNone); customPlot->axisRect()->setMargins(QMargins(200, 50, 20, 165)); customPlot->axisRect()->setBackground(QColor(245, 245, 245)); customPlot->yAxis->setLabel("Axis Label"); customPlot->yAxis->setOffset(30); customPlot->yAxis->setTickLabelPadding(30); customPlot->yAxis->setLabelPadding(30); customPlot->yAxis->setTickLengthOut(5); customPlot->yAxis->setSubTickLengthOut(2); addBracket(QPointF(200-95-27-17, 30), QPointF(1, 30), "Padding (if auto margins enabled)", QPointF(-25, -5), false, Qt::AlignLeft|Qt::AlignBottom); addBracket(QPointF(1, 370), QPointF(200, 370), "Margin", QPointF(0, 5), false, Qt::AlignHCenter|Qt::AlignTop); addBracket(QPointF(200-30, 240), QPointF(200, 240), "Axis offset", QPointF(-1, 5), true, Qt::AlignRight|Qt::AlignVCenter); addBracket(QPointF(200-35, 250), QPointF(200-30, 250), "Tick length out", QPointF(-1, 5), true, Qt::AlignRight|Qt::AlignVCenter); addBracket(QPointF(200-65, 240), QPointF(200-35, 240), "Tick label padding", QPointF(-1, 5), true, Qt::AlignRight|Qt::AlignVCenter); addBracket(QPointF(200-95-25, 240), QPointF(200-65-25, 240), "Label padding", QPointF(-1, 5), true, Qt::AlignRight|Qt::AlignVCenter); QCPItemLine *leftBorder = new QCPItemLine(customPlot); customPlot->addItem(leftBorder); leftBorder->setClipToAxisRect(false); leftBorder->start->setType(QCPItemPosition::ptViewportRatio); leftBorder->end->setType(QCPItemPosition::ptViewportRatio); leftBorder->start->setCoords(0, 0); leftBorder->end->setCoords(0, 1); leftBorder->setPen(QPen(Qt::gray, 0, Qt::DashLine)); QCPItemText *axisRectLabel = new QCPItemText(customPlot); customPlot->addItem(axisRectLabel); axisRectLabel->position->setType(QCPItemPosition::ptAxisRectRatio); axisRectLabel->position->setCoords(0.5, 0.5); axisRectLabel->setFont(QFont(QFont().family(), 16)); axisRectLabel->setText("QCPAxisRect"); axisRectLabel->setColor(QColor(0, 0, 0, 60)); customPlot->savePng(dir.filePath("AxisRectSpacingOverview.png"), 400, 400); }
void smart_plot::mousePress(QMouseEvent *event) { static double prevKey, prevValue; if(event->button() == Qt::MiddleButton) { QCPAbstractPlottable *plottable = activePlot()->plottableAt(event->localPos()); if(plottable) { QCPGraph *graph = qobject_cast<QCPGraph*>(plottable); plot_analytics analytics; plotStats stats; if(graph) { //Do diff by % range vs double mouseKey = graph->keyAxis()->pixelToCoord(event->localPos().x()); double mouseValue = graph->valueAxis()->pixelToCoord(event->localPos().y()); double keyRange = graph->keyAxis()->range().size(); double keyDistance_no_abs = 0; double value = 0; double key = 0; bool ok = false; double m = std::numeric_limits<double>::max(); //QCPGraphDataContainer analytics.plotAnalyze( graph, &stats, graph->keyAxis()->range()); //Iterate through on screen data and see which point is closest QCPGraphDataContainer::const_iterator QCPGraphDataBegin = graph->data().data()->findBegin(graph->keyAxis()->range().lower,true); QCPGraphDataContainer::const_iterator QCPGraphDataEnd = graph->data().data()->findEnd(graph->keyAxis()->range().upper,true); for (QCPGraphDataContainer::const_iterator QCPGraphDataIt=QCPGraphDataBegin; QCPGraphDataIt!=QCPGraphDataEnd; ++QCPGraphDataIt) { double valueRange = graph->valueAxis()->range().size(); double keyDistance = qAbs(mouseKey - QCPGraphDataIt->key)/keyRange; double valueDistance = qAbs(mouseValue - QCPGraphDataIt->value)/valueRange; if( (valueDistance + keyDistance) < m ) { value = QCPGraphDataIt->value; key = QCPGraphDataIt->key; keyDistance_no_abs = mouseKey - QCPGraphDataIt->key; ok = true; m = (valueDistance + keyDistance); } } // qDebug () << QDateTime::fromTime_t((int)mouseKey) << value; if(ok) { QToolTip::hideText(); if(!qSharedPointerDynamicCast<QCPAxisTickerDateTime>(graph->keyAxis()->ticker()).isNull()) { if(QApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) { quint32 timeDelta = qAbs(mouseKey-prevKey); // add the bracket at the top: QCPItemBracket *bracket = new QCPItemBracket(activePlot()); bracket->left->setAxes(graph->keyAxis(), graph->valueAxis()); bracket->left->setCoords(prevKey, value); bracket->right->setAxes(graph->keyAxis(), graph->valueAxis()); bracket->right->setCoords(mouseKey, value); // add the text label at the top: QCPItemText *wavePacketText = new QCPItemText(activePlot()); wavePacketText->position->setParentAnchor(bracket->center); wavePacketText->position->setCoords(0, -10); // move 10 pixels to the top from bracket center anchor wavePacketText->setPositionAlignment(Qt::AlignBottom|Qt::AlignHCenter); wavePacketText->setText( QString("%L1: ΔX->%L2 ΔY->%L3"). arg(graph->name().isEmpty() ? "..." : graph->name()). arg(seconds_to_DHMS(timeDelta)). arg(value-prevValue)); wavePacketText->setFont(QFont(font().family(), 12)); activePlot()->replot(); } else if(QApplication::keyboardModifiers().testFlag(Qt::AltModifier)) { if(QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)) graph->addData(graph->keyAxis()->pixelToCoord(event->localPos().x()), graph->valueAxis()->pixelToCoord(event->localPos().y())); else if(keyDistance_no_abs < 0) graph->addData(key - 1, std::numeric_limits<double>::quiet_NaN()); else graph->addData(key + 1, std::numeric_limits<double>::quiet_NaN()); activePlot()->replot(); } else if(QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)) { //Delete point graph->data().data()->remove(key); activePlot()->replot(); } //Hold Alt to insert NAN(Break link?) else { QDateTime dateTime; dateTime.setTime_t(mouseKey); //activePlot()->xAxis->tick QToolTip::showText(event->globalPos(), QString("<table>" "<tr>" "<th colspan=\"2\">%L1</th>" "</tr>" "<tr>" "<td>X:</td>" "<td>%L2</td>" "</tr>" "<tr>" "<td>Y:</td>" "<td>%L3</td>" "</tr>" "<tr>" "<td>Min:</td>" "<td>%L4</td>" "</tr>" "<tr>" "<td>Avg:</td>" "<td>%L5</td>" "</tr>" "<tr>" "<td>Max:</td>" "<td>%L6</td>" "</tr>" "</table>"). arg(graph->name().isEmpty() ? "..." : graph->name()). arg(dateTime.toString(qSharedPointerDynamicCast<QCPAxisTickerDateTime>(graph->keyAxis()->ticker())->dateTimeFormat())). arg(value). arg(stats.minValue). arg(stats.avgValue). arg(stats.maxValue), activePlot(), activePlot()->rect()); } } else { QToolTip::showText(event->globalPos(), QString("<table>" "<tr>" "<th colspan=\"2\">%L1</th>" "</tr>" "<tr>" "<td>X:</td>" "<td>%L2</td>" "</tr>" "<tr>" "<td>Y:</td>" "<td>%L3</td>" "</tr>" "<tr>" "<td>Min:</td>" "<td>%L4</td>" "</tr>" "<tr>" "<td>Avg:</td>" "<td>%L5</td>" "</tr>" "<tr>" "<td>Max:</td>" "<td>%L6</td>" "</tr>" "</table>"). arg(graph->name().isEmpty() ? "..." : graph->name()). arg(mouseKey). arg(value). arg(stats.minValue). arg(stats.avgValue). arg(stats.maxValue), activePlot(), activePlot()->rect()); } } prevKey = mouseKey; prevValue = value; } } } }
FlowViewWindow::FlowViewWindow(const QVector<CANFrame> *frames, QWidget *parent) : QDialog(parent), ui(new Ui::FlowViewWindow) { ui->setupUi(this); readSettings(); modelFrames = frames; playbackTimer = new QTimer(); currentPosition = 0; playbackActive = false; playbackForward = true; memset(refBytes, 0, 8); memset(currBytes, 0, 8); memset(triggerValues, -1, sizeof(int) * 8); //ui->graphView->setInteractions(); ui->graphView->xAxis->setRange(0, 8); ui->graphView->yAxis->setRange(-10, 265); //run range a bit outside possible number so they aren't plotted in a hard to see place ui->graphView->axisRect()->setupFullAxesBox(); QCPItemText *textLabel = new QCPItemText(ui->graphView); ui->graphView->addItem(textLabel); textLabel->setPositionAlignment(Qt::AlignTop|Qt::AlignHCenter); textLabel->position->setType(QCPItemPosition::ptAxisRectRatio); textLabel->position->setCoords(0.5, .5); textLabel->setText("+"); textLabel->setFont(QFont(font().family(), 16)); // make font a bit larger textLabel->setPen(QPen(Qt::black)); // show black border around text ui->graphView->xAxis->setLabel("Time Axis"); ui->graphView->yAxis->setLabel("Value Axis"); QFont legendFont = font(); legendFont.setPointSize(10); QFont legendSelectedFont = font(); legendSelectedFont.setPointSize(12); legendSelectedFont.setBold(true); ui->graphView->legend->setFont(legendFont); ui->graphView->legend->setSelectedFont(legendSelectedFont); ui->graphView->legend->setSelectableParts(QCPLegend::spItems); // legend box shall not be selectable, only legend items //ui->graphView->xAxis->setAutoSubTicks(false); //ui->graphView->xAxis->setAutoTicks(false); ui->graphView->xAxis->setAutoTickStep(false); ui->graphView->xAxis->setAutoSubTicks(false); ui->graphView->xAxis->setNumberFormat("gb"); ui->graphView->xAxis->setTickStep(5.0); ui->graphView->xAxis->setSubTickCount(0); connect(ui->btnBackOne, SIGNAL(clicked(bool)), this, SLOT(btnBackOneClick())); connect(ui->btnPause, SIGNAL(clicked(bool)), this, SLOT(btnPauseClick())); connect(ui->btnReverse, SIGNAL(clicked(bool)), this, SLOT(btnReverseClick())); connect(ui->btnStop, SIGNAL(clicked(bool)), this, SLOT(btnStopClick())); connect(ui->btnPlay, SIGNAL(clicked(bool)), this, SLOT(btnPlayClick())); connect(ui->btnForwardOne, SIGNAL(clicked(bool)), this, SLOT(btnFwdOneClick())); connect(ui->spinPlayback, SIGNAL(valueChanged(int)), this, SLOT(changePlaybackSpeed(int))); connect(ui->cbLoopPlayback, SIGNAL(clicked(bool)), this, SLOT(changeLooping(bool))); connect(ui->listFrameID, SIGNAL(currentTextChanged(QString)), this, SLOT(changeID(QString))); connect(playbackTimer, SIGNAL(timeout()), this, SLOT(timerTriggered())); connect(ui->graphView, SIGNAL(plottableDoubleClick(QCPAbstractPlottable*,QMouseEvent*)), this, SLOT(plottableDoubleClick(QCPAbstractPlottable*,QMouseEvent*))); connect(ui->txtTrigger0, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger1, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger2, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger3, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger4, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger5, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger6, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(ui->txtTrigger7, SIGNAL(textEdited(QString)), this, SLOT(updateTriggerValues())); connect(MainWindow::getReference(), SIGNAL(framesUpdated(int)), this, SLOT(updatedFrames(int))); ui->graphView->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->graphView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuRequestGraph(QPoint))); ui->flowView->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->flowView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuRequestFlow(QPoint))); playbackTimer->setInterval(ui->spinPlayback->value()); //set the timer to the default value of the control }
GraphVisualizer::GraphVisualizer(QWidget *parent) : QCustomPlot(parent), labelCoord(NULL) { // Layer pour la position des octaves this->addGraph(); QPen graphPen; graphPen.setColor(QColor(0, 0, 0, 40)); graphPen.setWidth(1); this->graph(0)->setPen(graphPen); this->graph(0)->setLineStyle(QCPGraph::lsLine); for (int i = 0; i < 10; i++) { int note = 12 * (i + 1); QCPItemText *textLabel = new QCPItemText(this); listTextOctave << textLabel; this->addItem(textLabel); textLabel->setPositionAlignment(Qt::AlignBottom|Qt::AlignHCenter); textLabel->position->setType(QCPItemPosition::ptPlotCoords); textLabel->position->setCoords(note, 0); textLabel->setText(Config::getInstance()->getKeyName(note)); textLabel->setFont(QFont(font().family(), 8)); textLabel->setColor(QColor(40, 40, 40)); } // Layer des moyennes this->addGraph(); graphPen.setColor(QColor(30, 250, 80)); graphPen.setWidth(2); this->graph(1)->setPen(graphPen); this->graph(1)->setLineStyle(QCPGraph::lsNone); this->graph(1)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 7)); this->graph(1)->setAntialiasedScatters(true); // Layer des valeurs this->addGraph(); graphPen.setColor(QColor(100, 130, 250)); graphPen.setWidth(2); this->graph(2)->setPen(graphPen); this->graph(2)->setLineStyle(QCPGraph::lsNone); this->graph(2)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCross, 5)); this->graph(2)->setAntialiasedScatters(false); // Layer des valeurs par défaut this->addGraph(); graphPen.setColor(QColor(100, 130, 250)); graphPen.setWidth(1); this->graph(3)->setPen(graphPen); this->graph(3)->setLineStyle(QCPGraph::lsNone); this->graph(3)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCross, 5)); this->graph(3)->setAntialiasedScatters(false); // Layer aperçu valeurs this->addGraph(); graphPen.setColor(QColor(0, 0, 0)); graphPen.setWidth(1); this->graph(4)->setPen(graphPen); this->graph(4)->setScatterStyle(QCPScatterStyle::ssPlus); labelCoord = new QCPItemText(this); this->addItem(labelCoord); labelCoord->position->setType(QCPItemPosition::ptPlotCoords); labelCoord->setText(""); QFont fontLabel = QFont(font().family(), 9); fontLabel.setBold(true); labelCoord->setFont(fontLabel); labelCoord->setColor(QColor(0, 0, 0)); // Message warning textWarning = new QCPItemText(this); this->addItem(textWarning); textWarning->setPositionAlignment(Qt::AlignTop | Qt::AlignLeft); textWarning->position->setType(QCPItemPosition::ptPlotCoords); textWarning->position->setCoords(0, 0); textWarning->setFont(QFont(font().family(), 10, 100)); textWarning->setColor(QColor(255, 0, 0)); // Axes this->xAxis->setVisible(false); this->xAxis->setTicks(false); this->yAxis->setVisible(false); this->yAxis->setTicks(false); // Marges this->axisRect()->setAutoMargins(QCP::msNone); this->axisRect()->setMargins(QMargins(0, 0, 0, 0)); // Filtre sur les événements this->installEventFilter(this); }
void MainWindow::setupItemAnchorTest(QCustomPlot *customPlot) { customPlot->xAxis->setRange(-3, 3); customPlot->yAxis->setRange(-3, 3); customPlot->xAxis->setAutoTickCount(5); customPlot->yAxis->setAutoTickCount(5); QCPItemPixmap *pixmapItem = new QCPItemPixmap(customPlot); customPlot->addItem(pixmapItem); pixmapItem->setPixmap(QPixmap("./gnu.png")); pixmapItem->setScaled(true); pixmapItem->topLeft->setCoords(-2, 2); pixmapItem->bottomRight->setCoords(-1, 1); labelItemAnchors(pixmapItem); QCPItemPixmap *pixmapItem2 = new QCPItemPixmap(customPlot); customPlot->addItem(pixmapItem2); pixmapItem2->setPixmap(QPixmap("./gnu.png")); pixmapItem2->setScaled(true); pixmapItem2->topLeft->setCoords(1, 0.5); pixmapItem2->bottomRight->setCoords(0, 2); labelItemAnchors(pixmapItem2); QCPItemRect *rect = new QCPItemRect(customPlot); customPlot->addItem(rect); rect->topLeft->setCoords(-2, 0); rect->bottomRight->setCoords(-1, -0.5); labelItemAnchors(rect); QCPItemRect *rect2 = new QCPItemRect(customPlot); customPlot->addItem(rect2); rect2->topLeft->setCoords(0, -1); rect2->bottomRight->setCoords(-0.5, 0); labelItemAnchors(rect2); QCPItemEllipse *ellipse = new QCPItemEllipse(customPlot); customPlot->addItem(ellipse); ellipse->topLeft->setCoords(0.5, 0); ellipse->bottomRight->setCoords(1, -1); labelItemAnchors(ellipse); QCPItemEllipse *ellipse2 = new QCPItemEllipse(customPlot); customPlot->addItem(ellipse2); ellipse2->topLeft->setCoords(2, -1); ellipse2->bottomRight->setCoords(1.1, 0.2); labelItemAnchors(ellipse2); QCPItemLine *line = new QCPItemLine(customPlot); customPlot->addItem(line); line->start->setCoords(-2, -1.5); line->end->setCoords(-1, -1.2); labelItemAnchors(line); QCPItemCurve *curve = new QCPItemCurve(customPlot); customPlot->addItem(curve); curve->start->setCoords(0, -1.5); curve->startDir->setCoords(1, -1.5); curve->endDir->setCoords(1, -1.2); curve->end->setCoords(2, -1.2); labelItemAnchors(curve); QCPItemBracket *bracket = new QCPItemBracket(customPlot); customPlot->addItem(bracket); bracket->left->setCoords(-2, -2); bracket->right->setCoords(2, -2); bracket->setLength(12); labelItemAnchors(bracket); QCPItemText *text = new QCPItemText(customPlot); customPlot->addItem(text); text->position->setCoords(0, -2.6); text->setText("QCustomPlot"); text->setFont(QFont(font().family(), 26)); text->setRotation(12); text->setPadding(QMargins(5, 5, 40, 5)); text->setBrush(QBrush(QColor(0, 0, 0, 30))); labelItemAnchors(text); }
GraphParamGlobal::GraphParamGlobal(QWidget * parent) : QCustomPlot(parent), forme(FORME_MANUELLE), flagEdit(false), limitEdit(0), nbPoints(140), raideurExp(50.0), yMin(0.), yMax(1.), xMin(0), xMax(140), labelCoord(NULL), previousX(-1) { // Layer pour la position des octaves this->addGraph(); QPen graphPen; graphPen.setColor(QColor(0, 0, 0, 40)); graphPen.setWidth(1); this->graph(0)->setPen(graphPen); this->graph(0)->setLineStyle(QCPGraph::lsLine); QVector<double> x, y; x.resize(20); y.resize(20); y[0] = y[3] = y[4] = y[7] = y[8] = y[11] = y[12] = y[15] = y[16] = y[19] = 2; y[1] = y[2] = y[5] = y[6] = y[9] = y[10] = y[13] = y[14] = y[17] = y[18] = -1; for (int i = 0; i < 10; i++) { int note = 12 * (i + 1); double pos = (double)(note * this->nbPoints) / 127.; x[2*i] = x[2*i+1] = pos; QCPItemText *textLabel = new QCPItemText(this); this->addItem(textLabel); textLabel->setPositionAlignment(Qt::AlignBottom|Qt::AlignHCenter); textLabel->position->setType(QCPItemPosition::ptPlotCoords); textLabel->position->setCoords(pos, 0); textLabel->setText(Config::getInstance()->getKeyName(note)); textLabel->setFont(QFont(font().family(), 8)); textLabel->setColor(QColor(40, 40, 40)); } this->graph(0)->setData(x, y); // Layers coloration zone sur laquelle s'étend le clavier this->addGraph(); x.resize(2); y.resize(2); x[0] = -1; x[1] = this->nbPoints + 1; y[0] = y[1] = -2; graphPen.setWidth(0); this->graph(1)->setPen(graphPen); this->graph(1)->setData(x, y); this->graph(1)->setBrush(QBrush(QColor(255, 255, 0, 30))); this->addGraph(); this->graph(2)->setPen(graphPen); this->graph(1)->setChannelFillGraph(this->graph(2)); // Layer des valeurs this->addGraph(); graphPen.setColor(QColor(100, 130, 250)); graphPen.setWidth(2); this->graph(3)->setPen(graphPen); this->graph(3)->setLineStyle(QCPGraph::lsNone); this->graph(3)->setScatterStyle(QCPScatterStyle::ssDot); this->graph(3)->setAntialiased(true); this->graph(3)->setAntialiasedScatters(true); // Layer aperçu valeurs this->addGraph(); graphPen.setColor(QColor(0, 0, 0)); graphPen.setWidth(1); this->graph(4)->setPen(graphPen); this->graph(4)->setScatterStyle(QCPScatterStyle::ssPlus); labelCoord = new QCPItemText(this); this->addItem(labelCoord); labelCoord->position->setType(QCPItemPosition::ptPlotCoords); labelCoord->setText(""); QFont fontLabel = QFont(font().family(), 9); fontLabel.setBold(true); labelCoord->setFont(fontLabel); labelCoord->setColor(QColor(0, 0, 0)); // Axes this->xAxis->setRange(0, this->nbPoints); this->yAxis->setRange(0, 1); this->xAxis->setVisible(false); this->xAxis->setTicks(false); this->yAxis->setVisible(false); this->yAxis->setTicks(false); // Marges this->axisRect()->setAutoMargins(QCP::msNone); this->axisRect()->setMargins(QMargins(0, 0, 0, 0)); // Préparation des données this->dValues.resize(this->nbPoints); this->dValues.fill(0.5); // Filtre sur les événements this->installEventFilter(this); // Affichage this->replot(); }