QTextLine限定只能输入16进制数
需求分析
QTextEdit实现输入十六进制数,如果输入了其他的字符则弹出提示框,并删除该字符。大致思路:每当输入一个字符时,QTextEdit会发出信号void textChanged()
,利用该信号创建一个与之相连接的槽函数void validateHEX()
,每发出一次信号触发一次槽函数,槽函数中就对最后一个字符进行判断,如果不是十六进制数或者空格,就弹出提示框。
代码
void SerialPortWidget::validateHEX()
{
QString text = sendTextEdit->toPlainText(); //获取QTextEdit中的纯文本
QTextCursor cur = sendTextEdit->textCursor(); //获取光标,默认获取的光标在最后
int pos = cur.position() - 1; //QString索引从0开始,因此减1是为了获取最后一个位置的字符的索引
if(pos >= 0) //pos为-1说明当前QTextEdit中没有文本
{
qDebug() << text.at(pos);
QChar ch = text.at(pos);
if((ch >= '0' && ch <= '9') //判断是否符合条件
|| (ch >= 'A' && ch <= 'F')
|| (ch >= 'a' && ch <= 'f')
|| (ch == ' '))
{
return;
}
else
{
cur.deletePreviousChar(); //删除光标所在位置的前一个字符
QMessageBox messagebox(this); //弹出提示框
messagebox.setWindowTitle("提示");
messagebox.setText("请输入16进制0-9,,A-F!\n按照AE 0D 3F 93的格式输入");
messagebox.addButton(new QPushButton("确定"), QMessageBox::AcceptRole);
messagebox.exec(); //阻塞GUI线程
}
}
}
SerialPortWidget::SerialPortWidget(QWidget *parent) : QWidget(parent)
{
...
//信号与槽函数连接
connect(sendTextEdit, &QTextEdit::textChanged, this, &SerialPortWidget::validateHEX);
...
}
运行结果
参考链接:https://blog.csdn.net/chdcyt/article/details/89789309?spm=1001.2014.3001.5502