11 #include <qcustomplot.h>
37 virtual void draw(QCPPainter *painter) {
38 if (!mKeyAxis || !mValueAxis) {
39 qDebug() << Q_FUNC_INFO <<
"invalid key or value axis";
44 QCPBars::draw(painter);
46 int fontHeight = painter->fontMetrics().height();
48 if (!data()->isEmpty()) {
49 double &key = data()->begin()->key;
50 double &value = data()->begin()->value;
51 QPointF P = coordsToPixels(key, value);
55 P.setX(P.x() + margin);
57 P.setY(P.y() + fontHeight);
59 for (
int i = 0; i <
m_text.size(); ++i) {
63 painter->fontMetrics().horizontalAdvance(
65 painter->drawText(Pstart,
m_text[i]);
66 P.setY(P.y() + fontHeight);
86 : QCPBars(keyAxis, valueAxis) {}
88 void setData(
const QVector<double> &key,
const QVector<double> &value) {
91 QCPBars::setData(key, value);
95 const QVector<double> &value,
96 const QVector<QColor> &
colors) {
97 Q_ASSERT(
colors.size() == key.size());
102 int n = qMin(key.size(), value.size());
104 for (
int i = 0; i < n; ++i) {
106 newData.key = key[i];
107 newData.value = value[i];
110 QCPBars::addData(newData.key, newData.value);
114 inline QRect
rect()
const {
return clipRect(); }
118 QCPBars::data().clear();
124 virtual void draw(QCPPainter *painter) {
128 QCPBars::draw(painter);
131 if (!mKeyAxis || !mValueAxis) {
132 qDebug() << Q_FUNC_INFO <<
"invalid key or value axis";
136 QCPColoredBarDataMap::const_iterator it;
140 if (it.key() + mWidth * 0.5 < mKeyAxis.data()->range().lower ||
141 it.key() - mWidth * 0.5 > mKeyAxis.data()->range().upper)
144 QRectF barRect = getBarRect(it.key(), it.value().value);
146 if (brush().style() != Qt::NoBrush &&
147 brush().
color().alpha() != 0) {
148 QBrush theBrush = brush();
149 theBrush.setColor(it.value().color);
151 applyFillAntialiasingHint(painter);
152 painter->setPen(Qt::NoPen);
153 painter->setBrush(theBrush);
154 painter->drawRect(barRect);
157 if (pen().style() != Qt::NoPen && pen().
color().alpha() != 0) {
159 thePen.setColor(it.value().color);
161 applyDefaultAntialiasingHint(painter);
162 painter->setPen(thePen);
163 painter->setBrush(Qt::NoBrush);
164 painter->drawPolyline(barRect);
179 : QCPAbstractPlottable(keyAxis, valueAxis),
214 return keyAxis() ? keyAxis()->pixelToCoord(pixX) : 0;
218 return valueAxis() ? valueAxis()->pixelToCoord(pixY) : 0;
225 QVariant *details = 0)
const override {
232 const QRectF &
rect)
const override {}
235 QCP::SignDomain inSignDomain = QCP::sdBoth)
const override {
241 QCP::SignDomain inSignDomain = QCP::sdBoth,
242 const QCPRange &inKeyRange = QCPRange())
const override {
261 mPen = QPen(QColor(80, 80, 80), Qt::SolidLine);
265 mBrush = QBrush(
Qt::white, Qt::SolidPattern);
271 virtual void draw(QCPPainter *painter) {
272 if (!keyAxis())
return;
274 QRect
rect = clipRect();
276 double currentPosd = keyAxis()->coordToPixel(
mCurrentVal);
278 int x2 =
static_cast<int>(
ceil(currentPosd));
280 if (x2 <
rect.
x())
return;
283 int x1 =
static_cast<int>(
floor(currentPosd));
285 if (x1 <
rect.
x())
return;
288 rect.setWidth(newWidth);
294 applyFillAntialiasingHint(painter);
295 painter->setPen(Qt::NoPen);
297 QBrush(QColor(128, 128, 128, 128),
299 painter->drawPolygon(
rect);
303 if (pen().style() != Qt::NoPen && pen().
color().alpha() != 0) {
307 int r =
rect.height() / 10;
309 painter->setPen(pen());
310 painter->setBrush(brush());
311 painter->drawEllipse(C, r, r);
313 painter->setPen(QPen(QColor(128, 128, 128, 128),
315 painter->drawLine(C + QPoint(0, r), C - QPoint(0, r));
336 explicit QCPArrow(QCPAxis *keyAxis, QCPAxis *valueAxis)
338 mPen.setColor(QColor(128, 128, 0));
339 mPen.setStyle(Qt::SolidLine);
343 mBrush.setColor(QColor(255, 255, 0, 196));
344 mBrush.setStyle(Qt::SolidPattern);
350 mBrush.setColor(QColor(r, g, b, 196));
356 virtual void draw(QCPPainter *painter) {
357 if (!keyAxis())
return;
359 QRect
rect = clipRect();
361 int currentPos =
static_cast<int>(keyAxis()->coordToPixel(
mCurrentVal));
363 int r =
rect.height() / 10;
367 QPen pen(QColor(128, 128, 128, 128), Qt::DashLine);
369 painter->setPen(pen);
370 painter->drawLine(QPoint(currentPos,
rect.
y() + 2 * r),
371 QPoint(currentPos,
rect.
y() +
rect.height()));
375 if (pen().style() != Qt::NoPen && pen().
color().alpha() != 0) {
380 QPoint O(currentPos,
rect.
y() + r);
381 QPoint T[3] = {O + QPoint(0, r), O - QPoint(r, r),
384 painter->setPen(pen());
385 painter->setBrush(brush());
386 painter->drawPolygon(T, 3);
QCustomPlot: small arrows at the bottom.
virtual void draw(QCPPainter *painter)
QCPArrow(QCPAxis *keyAxis, QCPAxis *valueAxis)
void setColor(int r, int g, int b)
Sets triangle 'inside' color.
QCustomPlot: vertical bar with text along side.
QCPBarsWithText(QCPAxis *keyAxis, QCPAxis *valueAxis)
void setText(QString text)
virtual void draw(QCPPainter *painter)
void setTextAlignment(bool left)
void appendText(QString text)
QCustomPlot: colored histogram.
QCPColoredBarDataMap m_coloredData
virtual void draw(QCPPainter *painter)
QCPColoredBars(QCPAxis *keyAxis, QCPAxis *valueAxis)
QMultiMap< double, QCPColoredBarData > QCPColoredBarDataMap
void setData(const QVector< double > &key, const QVector< double > &value)
void setData(const QVector< double > &key, const QVector< double > &value, const QVector< QColor > &colors)
QCustomPlot: greyed areas.
QCPHiddenArea(bool leftSide, QCPAxis *keyAxis, QCPAxis *valueAxis)
virtual void draw(QCPPainter *painter)
bool mLeftSide
Whether the cursor is displayed on the left side or not.
QCustomPlot: selectable cursor interface.
double pixelToValue(int pixY) const
Converts a pixel value (Y) to the equivalent value.
void range(double &minVal, double &maxVal) const
double pixelToKey(int pixX) const
Converts a pixel value (X) to the equivalent key.
void setRange(double minVal, double maxVal)
virtual bool isSelectable(QPoint click) const
double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const override
QCPSelectableCursor(QCPAxis *keyAxis, QCPAxis *valueAxis)
Default constructor.
QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const override
QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const override
void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const override
void setCurrentVal(double val)
double currentVal() const
MiniVec< float, N > floor(const MiniVec< float, N > &a)
MiniVec< float, N > ceil(const MiniVec< float, N > &a)
constexpr Rgb white(MAX, MAX, MAX)
constexpr Rgb blue(0, 0, MAX)