当前位置:   article > 正文

QTextEdit限制只能输入数字英文逗号_qlineedit设置只能输入数字

qlineedit设置只能输入数字

前言

    在开发中,经常会碰到需要限制用户的输入,如只能输入数字 英文等。关于用户的文本输入一般使用QLineEdit QTextiEdit,对这两个控件的限制需要使用不同的方法。

QLineEdit的限制

     众所周知,Qt中有setValidator方法可以限制QLineEdit的输入内容,包括已实现好的如QIntValidator、QDoubleValidator等,也可以使用正则表达式来限制输入,如下所示:

  1. m_pLineEdit = new QLineEdit(this);
  2. //设置只能输入数字
  3. m_pLineEdit->setValidator(new QIntValidator(1, 65535));
  4. //设置只能输入英文大小写字母和英文逗号
  5. QRegExp regexp;
  6. regexp.setPattern("^[a-zA-Z0-9,]+$");
  7. m_pLineEdit->setValidator(new QRegExpValidator(regexp));

QTextEdit的限制

       而QTextEdit不能与QLineEdit一样通过现有的方法来设置,只能另辟蹊径,因为QTextEdit在文本改变时会触发QTextEdit::textChanged 信号,所以可以获取实时改变的文本来限制输入,如下所示:

  1. //连接信号槽
  2. connect(ui.textEdit, &QTextEdit::textChanged, this, &Widget::textEditChanged);
  3. //槽函数实现
  4. void Widget::textEditChanged()
  5. {
  6. //只能输入数字 字母 英文逗号
  7. QRegExp reg;
  8. reg.setPattern("^[a-zA-Z0-9,]+$");
  9. QString strText = ui.textEdit->toPlainText();
  10. if (reg.exactMatch(strText))
  11. {
  12. m_symtext = strText;
  13. }
  14. else
  15. {
  16. ui.textEdit->setText(m_symtext);
  17. }
  18. }
  1. private:
  2. QString m_symtext;

  此时能发现已经不能输入不合法的内容了,还有一个小缺陷,输入限制内容时,光标会跳到最前面,这个也可以进行限制,完整内容:

  1. void Widget::textEditChanged()
  2. {
  3. //只能输入数字 字母 英文逗号
  4. QRegExp reg;
  5. reg.setPattern("^[a-zA-Z0-9,]+$");
  6. QString strText = ui.textEdit->toPlainText();
  7. if (reg.exactMatch(strText))
  8. {
  9. m_symtext = strText;
  10. }
  11. else
  12. {
  13. int offset = strText.length() - m_symtext.length();
  14. //改变光标的位置
  15. QTextCursor cursor = ui.textEdit->textCursor();
  16. auto pos = cursor.position();
  17. pos = pos >= offset ? pos - offset : pos;
  18. ui.textEdit->setText(m_symtext);
  19. cursor.setPosition(pos);
  20. ui.textEdit->setTextCursor(cursor);
  21. }
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/299716
推荐阅读
相关标签
  

闽ICP备14008679号