Loading

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

posted @ 2024-06-23 00:12  记录学习的Lyx  阅读(33)  评论(0编辑  收藏  举报