Meg*_*sa3 4 regex qt qt4 qt4.8
我正在 Qt 4.8 上制作一个 gui 应用程序,其中包含一些行编辑,让用户介绍一些信息。
通常,您可以用 4 种不同的方式编写文本“你好”:
我想要的是,无论用户如何书写,行编辑必须始终以大写字母显示(“HELLO”)。
我现在使用的是:
我的类.cpp:
auto validatorA = new MyValidator(parent);
myLineEdit->setValidator(validatorA);
Run Code Online (Sandbox Code Playgroud)
Myclass.h(包含之后和之前 class MyClass: ...)
class MyValidator: public QValidator {
public:
MyValidator(QObject* parent=nullptr): QValidator(parent) {}
State validate(QString& input, int&) const override {
input = input.toUpper();
return QValidator::Acceptable;
}
};
Run Code Online (Sandbox Code Playgroud)
它工作完美,但我还需要此行编辑以仅接受字母、空格和数字(不接受符号),因此在设置 validatorA 后我需要设置:
QRegExp rx("[A-Z\\.\\- 0-9]{0,30}");
QValidator *validator7 = new QRegExpValidator(rx, this);
myLineEdit->setValidator(validator7);
Run Code Online (Sandbox Code Playgroud)
我注意到设计的最后一个验证器决定了行为,所以我不能同时使用两者。如果我使用验证器 7,它工作正常,但它会因案例编号 4 而失败:如果大写并按下 Shift 键,则不会写入任何内容,就像用户没有打字一样,即使他正在敲击键盘。所以我不知道如何能够设置两个验证器(我对其他不同的 RegExp 进行了其他行编辑)。
那么......我怎样才能让我的 lineedits 遵循 RegExp 并始终以大写字母显示文本,而不管大写 + shift 的键盘组合?
非常感谢
使用验证器进行以下修改
QRegExp rx("[a-z-A-Z\\.\\- 0-9]{0,30}");
QValidator *validator7 = new QRegExpValidator(rx, this);
ui->lineEdit->setValidator(validator7);
Run Code Online (Sandbox Code Playgroud)
对于大写,请使用textEdited来自 LineEdit的信号,如下所示
void MainWindow::on_lineEdit_textEdited(const QString &arg1)
{
ui->lineEdit->setText(arg1.toUpper());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3664 次 |
| 最近记录: |