绑定到id,范围规则的未定义引用

时间:2014-10-16 18:40:09

标签: qt qml

我试图传递一些qml组件所需的对象。问题是我不能引用这个对象而不说它未定义。

Item {
    id: root

    property alias db: database // this works for some reason

    Database {
        id: database
        Component.onCompleted: {
            connect("sqlite3", "dbname=database.db")
            deleteTables();
            createTables();
        }
    }

    ContactImageProvider {
        id: contactImageProvider
        database: db // this works for some reason
        database: root.database // This would be undefined
        database: database // no loop detected but still null
    }
}

所以我非常困惑,我应该能够通过对象传递依赖关系而没有最令人困惑的命名方案。这可能是什么BTW。也许我需要一些控件中的颜色,但也希望将它传递给另一个控件。整个范围名称解析文档非常不清楚。我无法做出我应该做的事情。

Item {
    id: root

    property Database database: Database {
        id: database // if no id then this doesnt work
        Component.onCompleted: {
            connect("sqlite3", "dbname=database.db")
            deleteTables();
            createTables();
        }
    }
    property alias db: database

    ContactImageProvider {
        id: contactImageProvider
        database: db // this doesn't work. WHY? idk
        database: database // works if id is on
    }
}

如果我把它作为属性,别名似乎也不起作用。

1 个答案:

答案 0 :(得分:0)

对于我之后的任何可怜的灵魂,似乎这与属性名称和id名称的解析之间的差异有关。我最终得到的是这个。

Item {
    id: root

    property Database database: Database {
        // notice no id
        Component.onCompleted: {
            connect("sqlite3", "dbname=database.db")
            deleteTables();
            createTables();
        }
    }

    ContactImageProvider {
        id: contactImageProvider
        database: root.database // I can explicitly get a property
    }
}