如何在 QML 中处理 64 位整数?我知道无用的 Javascript 无法正常处理它们,因为它对所有内容都使用双精度,如果我尝试在信号中使用它们,所有内容都会设置为 undefined.有没有解决的办法?也许我必须使用 QVariant 之类的?
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?
推荐答案创建你自己的 Integer64 类派生自 QObject 并给它你需要的函数,比如p>
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); // ...使用 value() 在 QML 中获取字符串表示形式,使用 setValue() 从字符串表示形式中设置值.
where you use value() to get a string representation in QML and setValue() to set a value from a string representation.
可以使用额外的构造函数从 C++ 高效地创建 Integer64
An additional constructor can be used to efficiently create Integer64 from C++
public: explicit Integer64(QObject *parent = 0); explicit Integer64(qint64 value, QObject *parent); // ...然后将类型注册到QML
Then register the type to QML
qmlRegisterType<Integer64>("MyModules", 1, 0, "Integer64");