Important: Please read the Qt Code of Conduct -

Add Component to QQmlListProperty from C++?

  • Hi,

    i'm trying to add Component to QQmlListProperty from C++, but i am unable to do so. I've tried almost everything. I'm trying to solve on a Example: Writing QML Extensions with C++ (Chapter 5).

    I tried it in the following way:

    int main(int argc, char *argv[])
        QGuiApplication app(argc, argv);
        QQmlApplicationEngine* engine = new QQmlApplicationEngine();
        QQmlComponent* myComponent = new QQmlComponent(engine, engine);
        qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart");
        qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice");
        QObject* myComponentObj=myComponent->create();
        PieChart *chart = myComponentObj->findChild<PieChart*>("PieChart");
        PieSlice *slice = new PieSlice();
        return app.exec();
    QQmlListProperty<PieSlice> PieChart::slices()
        return QQmlListProperty<PieSlice>(this, 0, &PieChart::append_slice, 0, 0, 0);
    void PieChart::append_slice(QQmlListProperty<PieSlice> *list, PieSlice *slice)
        PieChart *chart = qobject_cast<PieChart *>(list->object);
        if (chart) {
    void PieChart::addSlice(PieSlice *slice){    
        QQmlListProperty<PieSlice> pieSlice=slices();

    Second try:
    Directly set QList<PieSlice*> chart->m_slices.append(slice);, but this also does not working. :( Method paint(QPainter *painter) in PieSlice.cpp does not call.
    Is it possible to solve this problem?
    Thank you for help

  • Qt Champions 2017

    once you create list you will not be able to modify the list. Note that objects cannot be individually added to or removed from the list once created; to modify the contents of a list, it must be reassigned to a new list.

  • @dheerendra
    Okay, thanks for reply. At last i used static items.

Log in to reply