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
作者:qianxiaohan
出处:https://www.cnblogs.com/qianxiaohan/p/18262915
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具