我想创建一个正则表达式列表,以便在我的应用程序中以单例形式使用,因此我不必到处都写它,我尝试创建qml QtObject,但它在qml中不起作用,因为在qml和{中没有RegExp对象{1}}不能作为正则表达式使用它的字符串。 我创建了一个cpp类,将正则表达式放入其中:
property var x = /regex/
对于cpp:
#ifndef UVALIDATORS_H
#define UVALIDATORS_H
#include <QObject>
#include <QRegExp>
#include <QQmlEngine>
#include <QJSEngine>
class UValidators : public QObject
{
Q_OBJECT
Q_DISABLE_COPY(UValidators)
Q_PROPERTY(QRegExp time READ time )
public:
static QObject* instance(QQmlEngine *engine,QJSEngine *scriptEngine){
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);
return new UValidators;
};
explicit UValidators(QObject *parent = nullptr);
QRegExp time() const;
signals:
public slots:
};
#endif // UVALIDATORS_H
然后我使用:
注册它#include "uvalidators.h"
UValidators::UValidators(QObject *parent) : QObject(parent)
{
}
QRegExp UValidators::time() const{
QRegExp time;
time.setPattern("/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/");
return time;
}
我这样使用它:
qmlRegisterSingletonType<UValidators>("U",1,0,"Validators",&UValidators::instance);
一切都很好,应用程序可以运行,但是textfield不会让我写任何东西。 有什么方法可以在qml或cpp中创建正则表达式列表?
答案 0 :(得分:2)
如果您的正则表达式表达式处于QML级别,则可以将它们存储在共享的js文件中:
// Regex.js
var time = /^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/;
在任何QML文件中均可使用:
import "Regex.js" as Regex
TextField {
validator: RegExpValidator {
regExp: Regex.time
}
}
答案 1 :(得分:0)
问题在于正则表达式/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/
,如果要将模式设置为QRegExp
,则应从正则表达式的开始和结束处放下/
。如果您知道在没有cpp的qml中解决此正则表达式问题的更好方法,请告诉我!
time.setPattern("^([0-1][0-9]|[2][0-3]):([0-5][0-9])$");