Qt中QTextEdit限制只能输入数字英文逗号

 更新时间:2023年06月29日 10:38:39   作者:AlwaysWin丶  
这篇文章主要给大家介绍了关于Qt中QTextEdit限制只能输入数字英文逗号的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

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

QLineEdit的限制

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

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

QTextEdit的限制

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

//连接信号槽
connect(ui.textEdit, &QTextEdit::textChanged, this, &Widget::textEditChanged);
 
//槽函数实现
void Widget::textEditChanged()
{
	//只能输入数字 字母 英文逗号
	QRegExp reg;
	reg.setPattern("^[a-zA-Z0-9,]+$");
 
	QString strText = ui.textEdit->toPlainText();
 
	if (reg.exactMatch(strText))
	{
		m_symtext = strText;
	}
	else
	{
		ui.textEdit->setText(m_symtext);
	}
}
private:
    QString m_symtext;

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

void Widget::textEditChanged()
{
	//只能输入数字 字母 英文逗号
	QRegExp reg;
	reg.setPattern("^[a-zA-Z0-9,]+$");
	QString strText = ui.textEdit->toPlainText();
	if (reg.exactMatch(strText))
	{
		m_symtext = strText;
	}
	else
	{
		int offset = strText.length() - m_symtext.length();
		//改变光标的位置
		QTextCursor cursor = ui.textEdit->textCursor();
		auto pos = cursor.position();
		pos = pos >= offset ? pos - offset : pos;
		ui.textEdit->setText(m_symtext);
		cursor.setPosition(pos);
		ui.textEdit->setTextCursor(cursor);
	}
}

补充:QTextEdit限制文本长度

  QString textContent = this->toPlainText();
    int length = textContent.count();
    int maxLength = maxLen; // 最大字符数
    if(length > maxLength)
    {
        int position = this->textCursor().position();
        QTextCursor textCursor = this->textCursor();
        textContent.remove(position - (length - maxLength), length - maxLength);
        this->setText(textContent);
        textCursor.setPosition(position - (length - maxLength));
        this->setTextCursor(textCursor);
    }

总结

到此这篇关于Qt中QTextEdit限制只能输入数字英文逗号的文章就介绍到这了,更多相关QTextEdit限制输入数字英文逗号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C语言数组中是以列优先吗

    详解C语言数组中是以列优先吗

    这篇文章主要给大家介绍了关于C语言指针名称及所指变量的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • 数据结构之数组翻转的实现方法

    数据结构之数组翻转的实现方法

    这篇文章主要介绍了数据结构之数组翻转的实现方法的相关资料,这里用几种实现方法来实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • php调用c++的方法

    php调用c++的方法

    这篇文章主要介绍了php调用c++的方法,需要的朋友可以参考下
    2014-01-01
  • 详解C语言中双向循环链表的实现

    详解C语言中双向循环链表的实现

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。本文将用C语言实现双向循环链表,需要的可以参考一下
    2022-06-06
  • Windows程序内部运行机制实例详解

    Windows程序内部运行机制实例详解

    这篇文章主要介绍了Windows程序内部运行机制实例详解,对于学习Windows程序设计来说是非常重要的一课,需要的朋友可以参考下
    2014-08-08
  • c++中stack、queue和vector的基本操作示例

    c++中stack、queue和vector的基本操作示例

    这篇文章主要给大家介绍了关于c++中stack、queue和vector基本操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • 在Visual Studio中用C++语言创建DLL动态链接库图文教程

    在Visual Studio中用C++语言创建DLL动态链接库图文教程

    这篇文章主要介绍了在Visual Studio中用C++语言创建DLL动态链接库图文教程,本文详细讲解了DLL库的创建过程,并给出了代码示例,需要的朋友可以参考下
    2014-09-09
  • 详谈浮点精度(float、double)运算不精确的原因

    详谈浮点精度(float、double)运算不精确的原因

    这篇文章主要介绍了详谈浮点精度(float、double)运算不精确的原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • c++中的基本IO类型详解

    c++中的基本IO类型详解

    IO的设备可以是文件、控制台、string。c++主要定义了三种IO类型,分别被包含在iostream、fstream、sstream头文件中,本文给大家分享c++中的基本IO类型,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • 深入了解C语言的动态内存管理

    深入了解C语言的动态内存管理

    所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存,本文将用5600字带你深入了解动态内存管理,感兴趣的可以学习一下
    2022-07-07

最新评论