在QML应用中指定小数符号



qml

中指定十进制符号

我只想让用户仅将DOT用于十进制符号,而不管他的机器在哪个位置。例如,我们支持en_us和nl_nl,但是在这两种语言设置中,我们都希望将用户仅使用DOT作为十进制符号。(与之通信的应有的旧系统(

我尝试了不同的方法:

QLocale newLanguageLocale = QLocale(QLocale::Dutch, QLocale::Netherlands);
newLanguageLocale.setNumberOptions(QLocale::c().numberOptions());
QLocale::setDefault(newLanguageLocale);

和qml:

Item 
{
    property int numberOfDecimals: 3
    TextInput
    {
        validator: doubleChecker
    }
    DoubleValidator
    {
        id: doubleChecker
        decimals: numberOfDecimals
        notation: DoubleValidator.StandardNotation
    }
}
  • LICALE EN_US:可以输入点,一切都按预期工作
  • loCale nl_nl:可以输入点,但用作千分离器。逗号仍然可以使用。(不想要(

因此,我尝试通过使用RegExpValidatorTextInput中解决它,但这不允许我创建苍蝇的正则表达式。我需要的是因为numberOfDecimals可以更改。

RegExpValidator
{
    id: doubleChecker
    //regExp: /^-?[0-9]+(.[0-9]{1,3})?$/   // This works (3 decimals), but I want to be able have a specified numberOfDecimals (some fields have different settings)
    regExp: new RegExp('/^-?[0-9]+(.[0-9]{1,' + numberOfDecimals + '})?$/') // doesn't work, can enter unlimited amount of decimals. Also when field is empty, I cannot type
}

有什么想法如何进行?我是否在RegExpValidator

中犯了语法错误

您需要正确使用构造符符号。这意味着:

  • 您需要使用Double Escapes来定义正则逃脱(也就是说,"\."以匹配字面的点,或者它将匹配以外的任何字符(,或将其与[...]一起包裹,一个字符类
  • 您不需要领先/尾随的/,称为正则分界符,因为它们在A REGEX LITERAL nevention中使用。

所以,您需要

new RegExp("^-?[0-9]+([.][0-9]{1," + numberOfDecimals + "})?$")

new RegExp("^-?[0-9]+(\.[0-9]{1," + numberOfDecimals + "})?$")

在此处使用构造函数符号是正确的,因为只有此符号允许将变量传递给正则模式。

查看有关如何在MDN上使用RegExp的更多信息。

最新更新