私は Qt と C++ の初心者です。QLineSeries オブジェクトを持つ QChart があります。座標系でのマウスの投影をユーザーに表示したい。私の問題は、QChart オブジェクト以外のどこにでも座標を表示できることです。マウスがQChart上にあるときだけ座標を表示したい。ここに私のコードのサンプルがあります:
boxWhisker.h ファイル
QGraphicsSimpleTextItem *m_coordX;
QGraphicsSimpleTextItem *m_coordY;
QChart *chartTrendLine;
QChartView *trendLineChartView;
QLineSeries *trendLine;
boxWhisker.cpp ファイル
this->chartTrendLine = new QChart();
this->chartTrendLine->addSeries(this->trendLine);
this->chartTrendLine->legend()->setVisible(true);
this->chartTrendLine->createDefaultAxes();
this->chartTrendLine->setAcceptHoverEvents(true);
this->trendLineChartView = new QChartView(this->chartTrendLine);
this->trendLineChartView->setRenderHint(QPainter::Antialiasing);
this->m_coordX = new QGraphicsSimpleTextItem(this->chartTrendLine);
this->m_coordX->setPos(this->chartTrendLine->size().width()/2+50,this->chartTrendLine->size().height());
this->m_coordY = new QGraphicsSimpleTextItem(this->chartTrendLine);
this->m_coordY->setPos(this->chartTrendLine->size().width()/2+100,this->chartTrendLine->size().height());
void boxWhiskerDialog::mouseMoveEvent(QMouseEvent *mouseEvent)
{
this->m_coordY->setText(QString("Y: %1").arg(this->chartTrendLine->mapToValue(mouseEvent->pos()).y()));
this->m_coordX->setText(QString("X: %1").arg(this->chartTrendLine->mapToValue(mouseEvent->pos()).x()));
}
私の質問は、どうすれば QChart にのみ座標を表示できますか? どんな助けでも感謝します!
編集
ここで、QChart クラスを継承する新しいクラスを作成し、新しいクラスで mouseEvent 関数を定義しようとしました。ここに私のコードのサンプルがあります:
qchart_me.h :
class QChart_ME : public QT_CHARTS_NAMESPACE::QChart
{
public:
QChart_ME();
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
private:
QGraphicsSimpleTextItem *m_coordX;
QGraphicsSimpleTextItem *m_coordY;
QChart *m_chart;
};
qchart_me.cpp :
QChart_ME::QChart_ME()
{
}
void QChart_ME::mouseMoveEvent(QGraphicsSceneMouseEvent *Myevent)
{
m_coordX->setText(QString("X: %1").arg(m_chart->mapToValue(Myevent->pos()).x()));
m_coordY->setText(QString("Y: %1").arg(m_chart->mapToValue(Myevent->pos()).y()));
}
boxWhisker.h:
QChart_ME *chartTrendLine;
boxWhisker.cpp
this->chartTrendLine = new QChart_ME();
this->chartTrendLine->addSeries(this->trendLine);
this->chartTrendLine->legend()->setVisible(true);
this->chartTrendLine->createDefaultAxes();
this->chartTrendLine->setAcceptHoverEvents(true);
QGraphicsSceneMouseEvent *myEvent;
this->chartTrendLine->mouseMoveEvent(myEvent);
Qt Callout Example のようにコードを編集しようとしていました。
私が得るエラー: 'virtual void QChart_ME::mouseMoveEvent(QGraphicsSceneMouseEvent*)' は、このコンテキスト内で保護されています this->chartTrendLine->mouseMoveEvent(myEvent);
この問題を解決するにはどうすればよいですか?