QlineEdit輸入字符奇怪自動補全上一次字符而且交叉影響

做一個名稱校驗的函數,不能輸入特殊字符;

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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章