2017-12-19 8 views
1

私はQMLでの初心者ですとQQmlListPropertyを使用するためのサンプルコードを理解する難しさを持っている:QQmlListProperty <T>:次のゲッター関数はなぜ機能しますか?

私はなchartItemの民間m_barsを参照せず(chartitem.cppファイルで、このゲッター機能を理解していません。 hファイル):

QQmlListProperty<BarItem> ChartItem::bars() 
{ 
    return QQmlListProperty<BarItem>(this, 0, 
       &ChartItem::append_bar,0, 0, 0); 
    // where is the reference to m_bars ? 
} 

戻されるデータはどれですか?返されたデータを含めるべきであるprivate Qlist<BarItem*> m_barsへの参照はありません。ここで

が重要なヘッダのコードスニペットと実装ファイルです...

/*---------- chartitem.h file : -----------*/ 
    class ChartItem : public QQuickPaintedItem 
    { 
     Q_OBJECT 
     Q_PROPERTY(QQmlListProperty<BarItem> bars READ bars NOTIFY barsChanged) 
    public: 
     ChartItem(QQuickItem *parent = 0); 
     void paint(QPainter *painter); 
     QQmlListProperty<BarItem> bars(); 
     ... 

     Q_SIGNALS: 
     void barsChanged(); 
    private: 
     static void append_bar(QQmlListProperty<BarItem> *list, BarItem *bar); 
     QList<BarItem*> m_bars; 
     ... 
    } 
    /*-----------------------------------------*/ 


/*------------- chartitem.cpp file --------*/ 
... 
QQmlListProperty<BarItem> ChartItem::bars() 
{ 
    return QQmlListProperty<BarItem>(this, 0, 
       &ChartItem::append_bar,0, 0, 0); 
    // where is the reference to m_bars ? 
} 

void ChartItem::append_bar(QQmlListProperty<BarItem> *list, BarItem *bar) 
{ 
ChartItem *chart = qobject_cast<ChartItem *>(list->object); 
if (chart) { 
    bar->setParent(chart); 
    chart->m_bars.append(bar); 
    chart->barsChanged(); 
} 
... 
/*-----------------------------------------*/ 

誰かが推論で私のエラーを説明できますか? ありがとうございます。

答えて

1

public membersQQmlListPropertyとしてください。あなたがデータを見ることができる唯一のものはoperator==です。それで、データが存在しないことは重要ではありません。誰もそれが存在しないことを誰も観察できないからです。

barsで行うことができるのは、提供される唯一の操作であるため、基本的にChartItem(いくつかのQMLマジックによって)要素を追加することです。ある意味では書き込み専用プロパティ

関連する問題