gpt4 book ai didi

regex - Qt4.8:如何使 QLineEdit 始终以大写显示文本并且仍然具有 RegExp

转载 作者:行者123 更新时间:2023-12-03 22:45:56 25 4
gpt4 key购买 nike

我正在 Qt 4.8 上制作一个 gui 应用程序,其中包含一些行编辑,让用户介绍一些信息。

通常,您可以用 4 种不同的方式编写文本“你好”:

  • 大写关闭,没有按下 shift = "hello"
  • 关闭大写,按下 shift = "HELLO"
  • 大写字母打开,没有按下 Shift = "HELLO"
  • Caps ON, shift press = "hello"

  • 我想要的是,无论用户如何书写,行编辑必须始终以大写字母显示(“HELLO”)。

    我现在使用的是:

    我的类.cpp:
    auto validatorA = new MyValidator(parent);
    myLineEdit->setValidator(validatorA);

    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;
    }
    };

    它工作完美,但我还需要此行编辑以仅接受字母、空格和数字(不接受符号),因此在设置 validatorA 后我需要设置:
    QRegExp rx("[A-Z\\.\\- 0-9]{0,30}");
    QValidator *validator7 = new QRegExpValidator(rx, this);
    myLineEdit->setValidator(validator7);

    我注意到设计的最后一个验证器决定了行为,所以我不能同时使用两者。
    如果我使用验证器 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);

    对于大写,请使用 textEdited来自 LineEdit 的信号像这样
    void MainWindow::on_lineEdit_textEdited(const QString &arg1)
    {
    ui->lineEdit->setText(arg1.toUpper());
    }

    关于regex - Qt4.8:如何使 QLineEdit 始终以大写显示文本并且仍然具有 RegExp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402759/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com