QQmlListProperty & л; Т & GT; : Почему работает следующая функция получения?

я новичок в qml и испытываю трудности с пониманием примера кода для использования QQmlListProperty:

Я не понимаю эту функцию получения в файле chartitem.cpp (без ссылки на приватные m_bars в файле chartitem.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

Решение

Посмотрите на публичные участники из QQmlListProperty, Единственное, что позволит вам наблюдать за данными, это operator==, Поэтому не имеет значения, что данные отсутствуют, потому что никто не может наблюдать их отсутствие.

Предположительно единственное, что вы можете сделать с bars это добавить элементы в базовый ChartItem (некоторым волшебством QML), потому что это единственная предоставленная операция. В некотором смысле это, таким образом, только для записи имущество

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]