前言
setMaximumBlockCount方法最多显示N段,继续输入会把最前行冲掉,为了解决这个缺陷,于是产生了本文。
QTextEdit->document()->setMaximumBlockCount(100);
QTextEdit只显示前N段数据,其后数据禁止追加
//定义
QTextEdit *m_CompanyInfo; //
int m_MaxLen;
功能:
1.只显示前3段数据
2.只显示前10个数据(中文/英文字母都算一个数据)
//初始化
m_CompanyInfo = new QTextEdit();
m_MaxLen = 0;
//通过信号textChanged来实时监控输入,从而控制输入
connect(m_CompanyInfo,&QTextEdit::textChanged,this,&PersonalProfile::slot_TextChanged);
//只显示前3段数据
void PersonalProfile::slot_TextChanged()
{
QString textContent = m_CompanyInfo->toPlainText();
int length = textContent.count();
int bkcount = m_CompanyInfo->document()->blockCount();
if(bkcount > 3)
{
int position = m_CompanyInfo->textCursor().position();
QTextCursor textCursor = m_CompanyInfo->textCursor();
textContent.remove(position - (length - m_MaxLen), length - m_MaxLen);
m_CompanyInfo->setText(textContent);
textCursor.setPosition(position - (length - m_MaxLen));
m_CompanyInfo->setTextCursor(textCursor);
bkcount = 3;//禁止光标换行后,当前段还可继续输入数据
}
if(bkcount <= 3)
{
//当前段继续输入数据,刷新最大输入数据个数
m_MaxLen = textContent.count();//m_MaxLen 必须是成员变量,不能是局部变量不然刷新失败
}
}
//只显示前10个数据
void PersonalProfile::slot_TextChanged_1()
{
QString textContent = m_CompanyInfo->toPlainText();
int length = textContent.count();
int maxLength = 10; // 最大字符数
if(length > maxLength)//
{
int position = m_CompanyInfo->textCursor().position();
QTextCursor textCursor = m_CompanyInfo->textCursor();
textContent.remove(position - (length - m_MaxLen), length - m_MaxLen);
m_CompanyInfo->setText(textContent);
textCursor.setPosition(position - (length - m_MaxLen));
m_CompanyInfo->setTextCursor(textCursor);
}
}