【问题标题】:Display Text On QtCharts在 QtCharts 上显示文本
【发布时间】:2017-08-13 23:14:59
【问题描述】:

我正在使用 QtCharts 类来制作折线图。我希望能够在图表本身上添加注释/文本。我怎样才能做到这一点?我找到了一个类似于我想要的示例“https://doc.qt.io/qt-5/qtcharts-callout-example.html”有没有更简单的方法?

【问题讨论】:

    标签: c++ qt user-interface qtwidgets


    【解决方案1】:

    这是我的版本。可能有错误

    textitem.h

    #pragma once
    
    #include <QtCharts/QChartGlobal>
    #include <QtWidgets/QGraphicsItem>
    
    QT_CHARTS_BEGIN_NAMESPACE
    class QChart;
    class QAbstractSeries;
    QT_CHARTS_END_NAMESPACE
    
    QT_CHARTS_USE_NAMESPACE
    
    
    class TextItem : public QGraphicsItem {
    public:
        TextItem(QString text, QPoint pos, QChart *chart, QAbstractSeries *series);
        QRectF boundingRect() const override;
        void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
    
        void setText(const QString &text);
        void setAnchor(QPointF point);
    private:
        QChart *_chart;
        QAbstractSeries *_series;
        QString _text;
        QRectF _textRect;
        QPointF _anchor;
    };
    

    textitem.cpp

    #include "textitem.h"
    #include <QtCharts/QChart>
    #include <QPainter>
    #include <QRect>
    
    TextItem::TextItem(QString text, QPoint pos, QChart *chart, QAbstractSeries *series)
        : QGraphicsItem(chart), _chart(chart), _series(series), _anchor(pos) {
        setText(text);
    }
    
    QRectF TextItem::boundingRect() const {
        QPointF anchor = mapFromParent(_chart->mapToPosition(_anchor, _series));
        QRectF rect;
        rect.setLeft(qMin(_textRect.left(), anchor.x()));
        rect.setRight(qMax(_textRect.right(), anchor.x()));
        rect.setTop(qMin(_textRect.top(), anchor.y()));
        rect.setBottom(qMax(_textRect.bottom(), anchor.y()));
        return rect;
    }
    
    void TextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
        Q_UNUSED(option)
        Q_UNUSED(widget)
        QPointF anchor = mapFromParent(_chart->mapToPosition(_anchor, _series));
        painter->drawText(anchor, _text);
    }
    
    void TextItem::setText(const QString &text) {
      _text = text;
      QFontMetrics metrics((QFont()));
      _textRect = metrics.boundingRect(QRect(0, 0, 150, 150),
                                       Qt::AlignLeft, _text);
      _textRect.translate(5, 5);
      prepareGeometryChange();
    }
    
    void TextItem::setAnchor(QPointF point) { _anchor = point; }
    

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2015-12-19
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多