Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在图表上显示文本_C++_Qt_User Interface_Qtwidgets - Fatal编程技术网

C++ 在图表上显示文本

C++ 在图表上显示文本,c++,qt,user-interface,qtwidgets,C++,Qt,User Interface,Qtwidgets,我正在使用QtCharts类制作一个折线图。我希望能够在图形本身上添加注释/文本。我该怎么做?我找到了一个与我想要的类似的例子“有没有更简单的方法?” 这是我的版本。可能会有错误 textitem.h #pragma一次 #包括 #包括 QT\u图表\u开始\u命名空间 QChart类; QAbstractSeries类; QT\u图表\u结束\u命名空间 QT\u图表\u使用\u命名空间 类TextItem:公共QGraphicsItem{ 公众: TextItem(QString文本、QPo

我正在使用QtCharts类制作一个折线图。我希望能够在图形本身上添加注释/文本。我该怎么做?我找到了一个与我想要的类似的例子“有没有更简单的方法?”

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

textitem.h
#pragma一次
#包括
#包括
QT\u图表\u开始\u命名空间
QChart类;
QAbstractSeries类;
QT\u图表\u结束\u命名空间
QT\u图表\u使用\u命名空间
类TextItem:公共QGraphicsItem{
公众:
TextItem(QString文本、QPoint位置、QChart*图表、QAbstractSeries*系列);
QRectF boundingRect()常量覆盖;
无效绘制(QPainter*painter、const QStyleOptionGraphicsItem*选项、QWidget*小部件)覆盖;
void setText(常量QString和text);
无效设置锚(QPointF点);
私人:
QChart*_图;
QAbstractSeries*\u系列;
QString_文本;
QRectF_textrct;
QPointF_锚;
};
textitem.cpp
#包括“textitem.h”
#包括
#包括
#包括
TextItem::TextItem(QString文本、QPoint位置、QChart*图表、QAbstractSeries*系列)
:QGraphicsItem(图表),_图表(图表),_系列(系列),_锚点(位置){
setText(文本);
}
QRectF TextItem::boundingRect()常量{
QPointF-anchor=mapFromParent(_-chart->mapToPosition(_-anchor,_-series));
qrectfrect;
setLeft(qMin(_textrct.left(),anchor.x());
rect.setRight(qMax(_textrct.right(),anchor.x());
setTop(qMin(_textrct.top(),anchor.y());
setBottom(qMax(_textrct.bottom(),anchor.y());
返回矩形;
}
void TextItem::paint(QPainter*painter、const QStyleOptionGraphicsItem*选项、QWidget*小部件){
Q_未使用(可选)
Q_未使用(小部件)
QPointF-anchor=mapFromParent(_-chart->mapToPosition(_-anchor,_-series));
画师->绘图文本(锚定,_文本);
}
void TextItem::setText(常量QString&text){
_文本=文本;
QFontMetrics度量((QFont());
_textRect=metrics.boundingRect(QRect(0,0,150,150),
Qt::AlignLeft,_text);
_textRect.translate(5,5);
准备计量变更();
}
void TextItem::setAnchor(QPointF点){{u anchor=point;}
#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;
};
#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; }