Search code examples
qtqmlqt-quick

64 bit integers in QML


How do I deal with 64 bit integers in QML? I know that useless Javascript can't handle them normally as it uses doubles for everything, and if I try to use them in a signal, everything gets set to undefined. Is there a way around this? Perhaps I have to use a QVariant or something?


Solution

  • Create your own Integer64 class derived from QObject and give it the functions you need, like

    class Integer64 : public QObject
    {
        Q_OBJECT
    
    public:
        // ...
        Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged)
        QString value() const;
        void setValue(QString value);
    
        Q_INVOKABLE void add(Integer64 * other);
        Q_INVOKABLE void subtract(Integer64 * other);
        Q_INVOKABLE void multiply(Integer64 * other);
        Q_INVOKABLE void divide(Integer64 * other);
        // ...
    

    where you use value() to get a string representation in QML and setValue() to set a value from a string representation.

    An additional constructor can be used to efficiently create Integer64 from C++

    public:
        explicit Integer64(QObject *parent = 0);
        explicit Integer64(qint64 value, QObject *parent);
        // ...
    

    Then register the type to QML

    qmlRegisterType<Integer64>("MyModules", 1, 0, "Integer64");