QLineEdit 功能强大的行文本编辑控件,大多数情况下用起来非常轻松方便。
这两天碰到了个特例,我需要在进行某些操作后,手动选中QLineEdit中的一个或一段文本,QLineEdit提供了如下函数:
void QLineEdit::setSelection ( int start, int length ), 从start指定的位置选中长度为length的文本,如果QLineEdit没有设置任何InputMask,这个函数随便怎么使用工作都非常正常
使用了InputMask后, 不断地点击按钮, start指定的位置围着ui->lineEdit->text().count()绕了一圈, “192.168.0.1”从来就没有选中过最后一个“1”
再试,还是没有选中过"192.168.0.1"的最后一个"1",怎么回事呢, 抓狂了很久才发现,ui->lineEdit的实际文本(text)是"192.168.0.1",而它显示和操作的文本(displayText)为"192.168.0 .1 ",也就是说QLineEdit在显示文本的时候会根据InputMask对实际文本进行填充补位,造成displayText的长度大于text的长度,而setSelection会用text的长度去检测start是否合法,如果start的值大于或等于text的长度, 会提示Invalid start position, 同时, 它选中displayText中start指定文本, 这样displayText超出的部分永远都选中不了, 这应该是QT的一个BUG