Bearded Beaver
Bearded Beaver

Reputation: 656

QList to QQmlListProperty

I'm trying to pass QList into QML using QQmlListProperty, as official documentation says:

QQmlListProperty::QQmlListProperty(QObject *object, void *data, CountFunction count, AtFunction at)

My code is:

QQmlListProperty<TTimingDriver> TTiming::getDrivers()
{
    return QQmlListProperty<TTimingDriver>(this, &m_drivers, &TTiming::count, &TTiming::driverAt);
}

int TTiming::count(QQmlListProperty<TTimingDriver> *property)
{
    TTiming * timing = qobject_cast<TTiming *>(property->object);
    return timing->m_drivers.count();
}

TTimingDriver * TTiming::driverAt(QQmlListProperty<TTimingDriver> *property, int i)
{
    TTiming * timing = qobject_cast<TTiming *>(property->object);
    return timing->m_drivers.at(i);
}

But I'm getting an error:

no matching function for call to 'QQmlListProperty<TTimingDriver>::QQmlListProperty(TTiming*, QList<TTimingDriver*>*, int (TTiming::*)(QQmlListProperty<TTimingDriver>*), TTimingDriver* (TTiming::*)(QQmlListProperty<TTimingDriver>*, int))'
 return QQmlListProperty<TTimingDriver>(this, &m_drivers, &TTiming::count, &TTiming::driverAt);

Upvotes: 1

Views: 1950

Answers (1)

Kevin Krammer
Kevin Krammer

Reputation: 5207

I think <ou are mixing two of the QQmlListProperty constructor overloads.

The one that takes the QList<T*> does not need pointers to functions.

So this should be sufficient

QQmlListProperty<TTimingDriver> TTiming::getDrivers()
{
    return QQmlListProperty<TTimingDriver>(this, &m_drivers);
}

Assuming that m_drivers is of type QList<TTimingDriver*>

Upvotes: 2

Related Questions