ChartView QMLオブジェクト内に独自の特定のチャートを作成したいと思います。私の期待は、たとえばC++でQCategoryAxisを指定し、qmlでこの関数を呼び出すことによって完全な柔軟性を持つことです。QtCharts(ChartView)のC++関数でqmlオブジェクトを定義する
まず第一に、私が望むようにすることさえ可能であるかどうかはわかりません。 そして私の非常に簡単な例では、私は解決できないいくつかのエラーを受け取ります。
誰かが私を助けてくれると嬉しいです、私はこの2週間からこのQML/C++の組み合わせに苦しんでいます。
diabchart.h
#ifndef DIABCHART_H
#define DIABCHART_H
#include <QtCharts/QChartView>
#include <QtCharts/QCategoryAxis>
#include <QObject>
QT_CHARTS_USE_NAMESPACE
class DiabChart : public QObject
{
Q_OBJECT
public:
explicit DiabChart(QObject *parent = 0);
public slots:
Q_INVOKABLE QCategoryAxis* getCategoryAxisY();
};
diabchart.cpp
#include "diabchart.h"
#include <QtCharts/QChartView>
QT_CHARTS_USE_NAMESPACE
DiabChart::DiabChart(QObject *parent)
: QObject(parent)
{
}
QCategoryAxis* DiabChart::getCategoryAxisY()
{
// Y-Axis (Bloodsugar)
QCategoryAxis *axisY = new QCategoryAxis();
axisY->append("critical", 50);
axisY->append("low", 70);
axisY->append("normal", 160);
axisY->append("high", 250);
axisY->append("extremly high", 450);
axisY->setRange(0, 450);
return axisY;
}
#endif // DIABCHART_H
main.cppに
#include <QQmlApplicationEngine>
#include <QtCharts/QChartView>
#include <QApplication>
#include "diabchart.h"
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qmlRegisterType<DiabChart>("DiabChart", 1, 0, "DiabChart");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml
import QtQuick 2.7
import QtQuick.Controls 1.4
import QtCharts 2.0
import DiabChart 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
DiabChart{
id: xyz
}
ChartView{
title: "Line"
anchors.fill: parent
antialiasing: true
//axes: xyz.getCategoryAxisY()
//Leads to: Error: Unknown method return type: QCategoryAxis*
//axes: getCategoryAxisY()
//Leads to: ReferenceError: getCategoryAxisY is not defined
//axes: DiabChart.getCategoryAxisY()
//Leads to: TypeError: Property 'getCategoryAxisY' of object [object Object] is not a function
ValueAxis{
id: vlaueAxisX
min: 0
max: 24
tickCount: 12
labelFormat: "%2.0f:00"
}
LineSeries {
axisX: vlaueAxisX
axisY: yAxis
name: "LineSeries"
XYPoint { id: zero; x: 0; y: 192.6}
XYPoint { id: first; x: 7; y: 89 }
XYPoint { x: 9; y: 100 }
XYPoint { x: 12; y: 50 }
XYPoint { x: 14; y: 250 }
XYPoint { x: 18; y: 140 }
XYPoint { x: 21; y: 80 }
XYPoint { id: last; x: 23.5; y: 200 }
XYPoint { id: twentyfour; x: 24; y: 192.6}
}
}
}
'QAbstractAxis *'を返そうとしましたか? (QMLチャートは最近開設されていて、私にとっても新しいものです) – Velkan