Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

[solved] Accessing C++ constants from within QML



  • I'm having trouble accessing C++ constants from within QML. I'm trying to create a Q_OBJECT that holds Q_PROPERTYs:

    @
    class Colors: public QObject
    {
    private:
    Q_OBJECT
    Q_PROPERTY (QColor contentBg READ getContentBg CONSTANT)
    public:
    Colors();
    virtual ~Colors() { }
    QColor getContentBg() const { return QColor ("#fefa07"); }
    };
    @

    Then I register the type through qmlRegisterUncreatableType:

    @
    int main(int argc, char *argv[])
    {
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    qmlRegisterUncreatableType<Colors> ("FirstQtTest.Defs", 1, 0, "Colors", "Instances of Colors are disallowed!");
    engine.load (QUrl (QStringLiteral ("qrc:///main.qml")));
    return app.exec();
    }
    @

    My QML file then tries to access the colour constant like this:

    @
    import FirstQtTest.Defs 1.0
    // ...
    color: Colors.contentBg;
    @

    I keep getting the runtime error: "Unable to assign [undefined] to QColor". What am I doing wrong?

    Thanks in advance!



  • I managed to get it to work by replacing qmlRegisterUncreatableType with setContextProperty:

    @
    Colors colors;
    engine.rootContext()->setContextProperty ("Colors", &colors);
    @

    I still can't tell why qmlRegisterUncreatableType doesn't work, but the above works fine in my case.


Log in to reply