首页 > 其他分享 >QlineEdit输入字符奇怪自动补全上一次字符而且交叉影响

QlineEdit输入字符奇怪自动补全上一次字符而且交叉影响

时间:2024-03-19 20:45:29浏览次数:22  
标签:字符 补全 diag contains remove strText QlineEdit replace 输入

做一个名称校验的函数,不能输入特殊字符;

SlotTextChanged函数作用是判断是否包含特殊字符,有的话,弹出提示,删除特殊字符之后,在设置回去;发现输入/之后,弹出模态提示,自动删除后,在右侧车牌号码输入框中输入任意字符a会自动变成/a;是模态对话框打断了变化消息,当在右侧输入字符时,触发了消息,会把上次输入的消息在复现出来;

 

void EmptyTreeItem::SlotTextChanged(QString strText)
{
	if (strText.size()>250)
	{
		WaringDialog diag("提示", "输入名称太长,请限制250个字符!");
		diag.setPicType(-2);
		diag.exec();
		strText = strText.left(250);
		ui.lineEditName->setText(strText);
	}
	if (strText.contains("\\")|| strText.contains("/")|| strText.contains(":")|| strText.contains("*") || strText.contains("?")|| strText.contains("\"")||strText.contains("<") || strText.contains(">") || strText.contains("|"))
	{
		WaringDialog diag("提示", "不能包含特殊字符:\\ : / * ? \" < > |");
		diag.setPicType(-2);
		diag.exec();
		strText=strText.replace("\\", "");
		strText = strText.replace("/", "");
		strText = strText.replace(":", "");
		strText = strText.replace("*", "");
		strText = strText.replace("?", "");
		strText = strText.replace("\"", "");
		strText = strText.replace("<", "");
		strText = strText.replace(">", "");
		strText = strText.replace("|", "");
		ui.lineEditName->setText(strText);
	}

}

  发现是模态窗口WaringDialog 导致,所以解决办法,就是用信号槽的方式,SlotTextChanged函数发信号,把模态提示放在变化之后弹出,避免阻塞输入变化;

void EmptyTreeItem::SlotTextChanged(QString strText)
{
	if (strText.size()>100)
	{
		
		strText = strText.left(100);
		ui.lineEditName->setText(strText);
		emit signalError(-2, "文字长度不能超过100");
	}
	if (strText.contains("\\")|| strText.contains("/")|| strText.contains(":")|| strText.contains("*") || strText.contains("?")|| strText.contains("\"")||strText.contains("<") || strText.contains(">") || strText.contains("|"))
	{
		if (strText.contains("\\"))
		{
			strText = strText.remove("\\");
		}
		if (strText.contains("/"))
		{
			strText = strText.remove("/");
		}
		if (strText.contains(":"))
		{
			strText = strText.remove(":");
		}
		if (strText.contains("*"))
		{
			strText = strText.remove("*");
		}
		if (strText.contains("?"))
		{
			strText = strText.remove("?");
		}
		if (strText.contains("\""))
		{
			strText = strText.remove("\"");
		}
		if (strText.contains("<"))
		{
			strText = strText.remove("<");
		}
		if (strText.contains(">"))
		{
			strText = strText.remove(">");
		}
		if (strText.contains("|"))
		{
			strText = strText.remove("|");
		}
		ui.lineEditName->setText(strText);
		emit signalError(-2, "不能包含特殊字符:\\ : / * ? \" < > |");
	}

}

  信号槽连接

connect(this, &EmptyTreeItem::signalError, this, &EmptyTreeItem::SlotError, Qt::QueuedConnection);
}

定义

public slots:
	void SlotTextChanged(QString strText);
	void SlotError(int type, QString strContent);
signals:
	void signalError(int type, QString strContent);

  

标签:字符,补全,diag,contains,remove,strText,QlineEdit,replace,输入
From: https://www.cnblogs.com/bclshuai/p/18083901

相关文章

  • Lazaurs调用VC的dll,字符串参数有中文的解决方法
    问题:在VC中定义了一个函数extern"C"__declspec(dllexport)inttest(constchar*filename)filename中可能有中文。Lazarus调用test传英文没问题,传中文出错。1、在VC项目设置-高级中选择“使用Unicode字符集”  --这个也是VC的默认值2、在lazarus中在项目设置-编译器......
  • 如何解决 WinForm窗体标题字符数限制 导致的显示不全问题?
    现在需要对窗体标题进行居中显示,通过在标题内容前增加空格的方式达到该目的。实测是发现窗口标题的字符数量受到操作系统限制网上查询的最大标题字符数是260个字符实测最大字符数为587个下面的代码可以勉强解决“由于最大字符数受到操作系统的限制导致最大化时显示不全”的问......
  • 1.字符串专题
    字符串专题\(A\)CF1037HSecurity\(B\)CF1073GYetAnotherLCPProblem\(C\)CF906EReverses\(D\)CF666EForensicExamination\(E\)P4199万径人踪灭\(F\)CF1535FStringDistance\(G\)CF1400Fx-primeSubstrings\(H\)CF955DScissors\(I\)CF153......
  • C语言进阶篇之字符函数和字符串函数(含模拟实现库函数)
    本篇主要整理了C语言字符函数和字符串函数的介绍,使用,以及库函数的模拟,持续更新中。老铁们,整理不易,创作不易,先赞后看养成习惯,你的支持是对我更新最大的鼓励!函数介绍与模拟实现1.1strlen求字符串长度size_tstrlen(constchar*str);注:1.字符串已经'\0'作为结束标......
  • HJ2 计算某字符出现次数
    https://www.nowcoder.com/practice/a35ce98431874e3a820dbe4b2d0508b1?tpId=37&tqId=21225&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=写......
  • 459. 重复的子字符串c
    voidbuild(int*next,char*s,intn){next[0]=-1;intindex=1,j=-1;while(index<n){if(j==-1||s[index-1]==s[j]){j++;next[index++]=j;}else{j=next[j];}}for(inti=0;......
  • 28. 找出字符串中第一个匹配项的下标c
    voidbulid(int*next,char*s,intn){next[0]=-1;intindex=1,j=-1;while(index<n){if(j==-1||s[index-1]==s[j]){j++;next[index++]=j;}else{j=next[j];}}}intstrStr(c......
  • C语言判断回⽂字符串
    使用C语言判断这个字符串是否是回⽂字符串(字符串的长度小于等于30,字符串不包含空格),如果是回文字符串输出Yes,如果不是回⽂字符串输出No。回文串:是一个正读和反读都一样的字符串方法:1.使用两个指针分别放置在字符串的头和尾,进行比较,如果相同,则头++,尾–.不同则结束判断......
  • java判断拼音字符串是不是汉字全拼
    publicstaticvoidmain(String[]args){Stringstr="wange";Stringstr1="huanggong";Stringstr2="wang文胜";Stringstr3="heihiyijiaren";Stringstr4="huangt......
  • 字符串增加千分位 负号提前处理
    *千分位DATA:LV_STRTYPESTRING,LV_CURRCTYPESTRING,LV_TMP1TYPESTRING,LV_TMP2TYPESTRING,LV_LENTYPEI,LV_LEN1TYPEI,LV_LEN2TYPEI,LV_LEN3TYPEI,LV_LEN4TYPEI.DATA:LV_CURRTYPEBAPICURR-BA......