Learn what Felgo offers to help your business succeed. Start your free evaluation today! Felgo for Your Business


OverviewFelgo 3 Support (Qt 5) › Externalize license key

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
  • #17948


    So, obviously I don’t want my keys to be in source control…

    I’m thinking to set the key as an environment variable for the build process, allowing me to rotate keys and rebuild easily.  If I do that…

    1. Is a context property the best way to consume it in my main.qml file?
    2. Do I even need to have licenseKey in my QML or can I set it in my main.cpp when initializing the engine?

    #2 would be my preference.  Any examples or pointers to relevant article appreciated.  Thanks!




    Yeah, was thinking about something similar, but in this scenario(small Indie game/app and the plugins we use), I don’t see many cases where I would have separate set of credentials per environment.
    Often you see dev mode flags in plugins rather than sandbox set of credentials.
    In something like web development, where your code lands with developers who shouldn’t have production access to your db etc, it definitely makes a lot of sense.
    Here, I am not sure.
    In the end your code lands on somebody else’s machine which you don’t control.
    Probably in small, Indie team is not that big deal.
    But if there are any plans to allow separating keys from your source code, and it would be supported in some way by Felgo, I would also be interested.



    Agree, Marcin.

    It’s not elegant, but here is what I decided to do for now.

    I have a little script that spits out a very simple header

    if [ -z $LICENSE_KEY ]; then
    cat <<EOM
    No license key exported, try something like...
    Get your key from https://felgo.com/developers/license/
    exit 1
    cat <<EOF >> some/dir/license.h
    #ifndef LICENSE_H
    #define LICENSE_H
    #define LICENSE_KEY "${LICENSE_KEY}"
    #endif // LICENSE_H

    That will create license.h that looks like this

    #ifndef LICENSE_H
    #define LICENSE_H
    #define LICENSE_KEY "15E83736..."
    #endif // LICENSE_H

    Then include and use to set a context property

    // add these includes
    #include <QQmlContext>
    #include "license.h"
    int main(int argc, char *argv[])
        QApplication app(argc, argv);
        VPApplication vplay;
        QQmlApplicationEngine engine;
        // add key as property
        engine.rootContext()->setContextProperty("appLicenseKey", LICENSE_KEY);
        return app.exec();

    Your app now just uses the context property

    App {
        id: app
        licenseKey: appLicenseKey

    I specifically added license.h to my .gitignore so it never accidentally gets committed to GitHub.  That’s it, ugly but simple, and my key never leaves my dev env…well except in the compiled binary, but that’s a different problem to solve 🙂


    Felgo Team


    Felgo does not specifically cover using different key settings in a project. Your solutions generally looks good Mike: Using a context property is a simple way of passing the key from your main.cpp to the QML.

    For Felgo projects, we also often combine the different key constants used in QML into a singleton QML type. For example, the Qt World Summit demo holds all settings like license key, game network configuration, etc … in qml/common/AppSettings.qml. This singleton type makes the constants available with a simple import in QML. If you want to create a singleton, please don’t miss to also add a qmldir file with the correct settings. (You can see the demo project for reference)

    When working with multiple setting-properties, you can also create and register a QML type with C++, instead of passing a context property. You can find more information here: Integrating QML and C++

    For build configuration and variants, you can also have a look at the qmake system, which allows you to configure your build in the *.pro configuration of your project.


Viewing 4 posts - 1 through 4 (of 4 total)

RSS feed for this thread

You must be logged in to reply to this topic.

Qt_Technology_Partner_RGB_475 Qt_Service_Partner_RGB_475_padded