2016-07-16 10 views
1

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} 
     } 
    } 
} 
+0

'QAbstractAxis *'を返そうとしましたか? (QMLチャートは最近開設されていて、私にとっても新しいものです) – Velkan

答えて

1

だから、答えはQAbstractAxis*です。

QMLでC++型を使用できるようにするには、ソースコードのどこかにその型の少なくともQ_DECLARE_METATYPE()が存在する必要があります。 Qt自体はAbstractAxis QMLタイプ(チャートAPIのqtドキュメントから見られるように)で動作するので、それは既にQAbstractAxis*に対して行われています。しかし、QCategoryAxis*は登録されていない可能性があります。

+0

と質問を終わらせてください、pls – Velkan

関連する問題