如何在 QML 旋转框中使用浮点数

Ed *_*Nio 3 qt qml qspinbox qtquick2

我使用 QML Spinbox,但在其中使用浮点数时遇到问题。如果我写类似的东西value: 5.0,它将显示为5,因此显示为int 而不是浮点数。

你知道如何进行吗?

非常感谢,祝你有美好的一天!

eyl*_*esc 8

您可以使用自定义文本创建一个 Spinbox

DoubleSpinBox.qml

import QtQuick 2.0

import QtQuick.Controls 2.1

Item {
    property int decimals: 2
    property real realValue: 0.0
    property real realFrom: 0.0
    property real realTo: 100.0
    property real realStepSize: 1.0

    SpinBox{
        property real factor: Math.pow(10, decimals)
        id: spinbox
        stepSize: realStepSize*factor
        value: realValue*factor
        to : realTo*factor
        from : realFrom*factor
        validator: DoubleValidator {
            bottom: Math.min(spinbox.from, spinbox.to)*spinbox.factor
            top:  Math.max(spinbox.from, spinbox.to)*spinbox.factor
        }

        textFromValue: function(value, locale) {
            return parseFloat(value*1.0/factor).toFixed(decimals);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

例子:

DoubleSpinBox{
    realValue: 5.0
    realStepSize: 0.01
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 基本上它是一样的,作为 GrecKo 链接的第二个例子,只是不太好,因为你忘记了很多部分: `valueFromText` 这样有人可以输入文本,它被验证。并且您无法通过(我找不到任何理由)将“SpinBox”封装在“Item”中来读出隐藏它的值。我看不到您如何将当前值写回您的“Item”。 (2认同)

Max*_*rno 7

当前的 SpinBox(控件 2.0 - 2.4)有一个限制,因为它只接受一个to/from范围的 +/- 0x7FFF FFFF(它甚至不能处理无符号整数,顺便说一句)。对于reals 这有(可能是严重的)暗示,对于小数点后需要的每个数字,小数点前都会丢失一个数字。例如,如果您需要 6 位十进制精度,则最大可能值为2147.483647. 到目前为止,这会影响此答案中提出的两个解决方案。

如果您尝试设置tofrom超出这些int限制(例如,通过乘以此处建议中的系数),您将获得非常“奇怪”的行为,这可能会令人困惑。如果您尝试直接超出这些限制(例如to: 0xFFFFFFFF),则会出现错误。

请参阅(并投票给 :))QTBUG-67349

我意识到这不是问题的答案,但希望它可以像我一样节省几个小时的挫败感。

到目前为止我能想出的唯一解决方法是简单地使用带有 DoubleValidator 的文本编辑字段。我将尝试用一个简化的例子回到这里。

编辑:

这是我的 DoubleSpinBox 版本文档)。代码太长,无法粘贴在这里(恕我直言),我宁愿不维护多个版本。

简而言之,我们的想法是value完全绕过 SpinBox ,只使用基本的 Controls.2 SpinBox 作为按钮和整体外观/感觉。这意味着不需要为每个主题(Fusion/Material/等)进行定制。

不幸的是,这涉及重新实现所有事件处理程序(按钮按下/重复、滚轮滚动、文本编辑)和一些其他诡计。但是(到目前为止)我认为在尝试匹配所有不同主题的同时,使用自定义按钮/等从头开始重新实现整个事情。

它还添加了一些在标准 SpinBox 中不可用的选项......因为,为什么不呢?:)

默认主题 融合主题 材质主题