gpt4 book ai didi

c++ - QQmlList属性 : Why does the following getter function work?

转载 作者:行者123 更新时间:2023-11-30 05:06:32 26 4
gpt4 key购买 nike

我是 qml 的新手,很难理解使用 QQmlListProperty 的示例代码:

我不明白 chartitem.cpp 文件中的这个 getter 函数(没有引用 chartitem.h 文件中的私有(private) m_bars):

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();
}
...
/*-----------------------------------------*/

有人可以解释我在推理中的错误吗?提前谢谢你。

最佳答案

查看public members QQmlListProperty。唯一能让您观察数据的是 operator==。所以数据不存在并不重要,因为没有人可以观察到它的缺失。

据推测,您可以使用 bars 做的唯一事情就是将元素添加到底层 ChartItem(通过一些 QML 魔法),因为这是唯一提供的操作。从某种意义上说,它因此是一个只写属性

关于c++ - QQmlList属性<T> : Why does the following getter function work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47886320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com