qmlとQtCharts/Chartviewと組み合わせてC++で作業するのは苦労しています。何かアドバイスがあれば、私はここに満足しています!QMLチャートビューにC++ QAbstractSeriesを追加
質問:QMLでChartviewにC++で定義されたQLineSeriesを追加したいと思います。 私の主な問題は、私のC++クラスsetLineSeries()
をqml Chartview{}
オブジェクトに接続することです。
series = diabetesView.setLineSeries();
var series = diabBig.createSeries(ChartView.SeriesTypeLine, "Test", diabBig.axisX(lineseries), diabBig.axisY(lineseries));
と、私のCに、このシリーズのオブジェクトを変更するよりも新しいシリーズを作成することによって、これを実行しようとしましたどのように私のQLineSeries(QAbstractSeries)をC++から使用するのが意図された方法でしょうか?
EDIT:「私がしようとしていることができない場合、これは私が読んでみたいものではないにしても、受け入れられる答えでしょう!
diabChart.h
#ifndef DIABCHART_H
#define DIABCHART_H
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QDateTimeAxis>
#include <QtCharts/QCategoryAxis>
#include <QDateTime>
#include <QtQuick/QQuickPaintedItem>
#include <QColor>
#include <QObject>
QT_CHARTS_USE_NAMESPACE
class DiabChart : public QObject
{
Q_OBJECT
public:
explicit DiabChart(QObject *parent = 0);
Q_INVOKABLE QAbstractSeries* setLineSeries();
};
#endif // DIABCHART_H
diabChart.cpp
#include "diabchart.h"
#include <QtCharts/QChartView>
QT_CHARTS_USE_NAMESPACE
Q_DECLARE_METATYPE(QAbstractSeries *)
Q_DECLARE_METATYPE(QAbstractAxis *)
DiabChart::DiabChart(QObject *parent)
: QObject(parent)
{
qRegisterMetaType<QAbstractSeries*>();
qRegisterMetaType<QAbstractAxis*>();
}
QAbstractSeries* DiabChart::setLineSeries()
{
QLineSeries *bloodSugarSeries = new QLineSeries();
QPen penBloodSugar;
penBloodSugar.setColor(QColor(34, 102, 102));
penBloodSugar.setWidth(5);
QDateTime xValue;
xValue.setDate(QDate(2016,7,3));
xValue.setTime(QTime(0,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 192.6);
xValue.setTime(QTime(7,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 89);
xValue.setTime(QTime(9,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 100);
xValue.setTime(QTime(12,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 50);
xValue.setTime(QTime(14,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 250);
xValue.setTime(QTime(18,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 140);
xValue.setTime(QTime(21,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 80);
xValue.setTime(QTime(23,30));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 200);
xValue.setDate(QDate(2016,7,4));
xValue.setTime(QTime(0,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 192.6);
bloodSugarSeries->setPen(penBloodSugar);
return bloodSugarSeries;
}
main.cppに
:ここは私の短い、毒舌のコード例であります
#include <QQmlApplicationEngine>
#include <QtWidgets/QApplication>
#include <QtCharts/QChartView>
#include <QtWidgets/QMainWindow>
#include <QtQuick/QQuickView>
#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.5
import QtQuick.Controls 1.4
import QtCharts 2.0
import DiabChart 1.0
ApplicationWindow {
id: windowwindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
DiabChart{
id: diabetesView
}
function addseries()
{
// var xyz = diabetesView.setLineSeries();
var series = diabBig.createSeries(ChartView.SeriesTypeLine, "Test", diabBig.axisX(lineseries), diabBig.axisY(lineseries));
series.append(0,50);
series.append(4,130);
series = diabetesView.setLineSeries();
diabBig.update();
}
Column{
Rectangle{
id: infoArea1
color: "green"
width: windowwindow.width
height: windowwindow.height *0.25
MouseArea{
anchors.fill: parent
onClicked: addseries()
}
}
ChartView{
id: diabBig
width: windowwindow.width
height: windowwindow.height *0.75
title: "Line"
antialiasing: true
ValueAxis{
id: vlaueAxisX
min: 0
max: 24
tickCount: 12
labelFormat: "%2.0f:00"
}
ValueAxis{
id: valueAxisY
min:0
max: 500
tickCount: 50
}
LineSeries {
id: lineseries
axisX: vlaueAxisX
axisY: valueAxisY
name: "LineSeries"
XYPoint { id: zero; x: 0; y: 192.6}
XYPoint { id: first; x: 7; y: 89 }
XYPoint { x: 9; y: 80 }
XYPoint { x: 12; y: 30 }
XYPoint { x: 14; y: 150 }
XYPoint { x: 18; y: 40 }
XYPoint { x: 21; y: 280 }
XYPoint { id: last; x: 23.5; y: 200 }
XYPoint { id: twentyfour; x: 24; y: 192.6}
}
}
}
}
test.pro
TEMPLATE = app
QT += charts qml quick
CONFIG += c++11
SOURCES += main.cpp \
diabchart.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = #../Diabetes
# Default rules for deployment.
include(deployment.pri)
DISTFILES +=
HEADERS += diabchart.h