QT学习笔记:QT小白,经过两天两夜终于攻克一个小技术难题

[复制链接]
58|2
 楼主 | 2019-7-20 11:25 | 显示全部楼层 |阅读模式
功能描述1:
有一个文本输入框,当往里面输入文本,或者粘贴文本时候,触发事件
实现:textChanged()
功能描述2:全部大写显示
实现:toUpper()
功能描述3:
当输入的文本内容含有非16进制字符(a~F,A~F,0~9)时候删除这些字符.
  1.             if((str[i]>='0')&&(str[i]<='9'))
  2.             {
  3.             }
  4.        else if ((str[i]>='A')&&(str[i]<='F'))
  5.             {
  6.             }
  7.             else
  8.             {
  9.              str=str.remove(i,1);
  10.              i--;
  11.             }
复制代码


功能描述4:在文本字符串中,没两个字符中间插入一个空格,如果该位置是空格不操作,如果不是插入空格。
功能描述5:光标的位置跟着变化,如果插入一个空格字符光标就后移一位
实现:
  1.         if(((i+1)%3)==0)
  2.          {
  3.            if(!(str.at(i)==' '))
  4.            {
  5.              str.insert(i,' ');
  6.              ui->textEdit->setText(str);
  7.              for (int j=0;j<=tem_position;j++)
  8.              {
  9.                 ui->textEdit->moveCursor(QTextCursor::NextCharacter,QTextCursor::MoveAnchor);
  10.              }


  11.            }
  12.          }
复制代码


存在的问题1:移动光标采用的是一次只移动一个字符,所以使用的for循环实现移动到某个位置,这样程序运行就慢了,有没有直接指定文本框内光标位置的方法呢?谁知道说一下。比如我要在第17个字符前设置光标。怎么设置?



使用特权

评论回复
 楼主 | 2019-7-20 11:25 | 显示全部楼层
  1. #include "hex.h"
  2. #include "ui_hex.h"
  3. #include "qdebug.h"
  4. Hex::Hex(QWidget *parent) :
  5.     QMainWindow(parent),
  6.     ui(new Ui::Hex)
  7. {
  8.     ui->setupUi(this);
  9. }

  10. Hex::~Hex()
  11. {
  12.     delete ui;
  13. }

  14. void Hex::on_textEdit_textChanged()
  15. {
  16.     ui->textEdit->disconnect();
  17.     QString str =ui->textEdit->toPlainText();
  18.     int tem_position=ui->textEdit->textCursor().position();
  19.     qDebug()<<"001,length:"<<str.length();
  20.     qDebug()<<"002,size:"<<str.size();
  21.     qDebug()<<"003:"<<str;
  22.     if(str.length()>0)
  23.     qDebug()<<"004:"<<str.at(str.length()-1);
  24.     qDebug()<<"--------------------------------";
  25. str=str.toUpper();
  26.     for( int i=0;i<str.length();i++)
  27.     {

  28.         if(((i+1)%3)==0)
  29.          {
  30.            if(!(str.at(i)==' '))
  31.            {
  32.              str.insert(i,' ');
  33.              ui->textEdit->setText(str);
  34.              for (int j=0;j<=tem_position;j++)
  35.              {
  36.                 ui->textEdit->moveCursor(QTextCursor::NextCharacter,QTextCursor::MoveAnchor);
  37.              }


  38.            }
  39.          }
  40.         else
  41.         {
  42.             if((str[i]>='0')&&(str[i]<='9'))
  43.             {
  44.             }
  45.        else if ((str[i]>='A')&&(str[i]<='F'))
  46.             {
  47.             }
  48.             else
  49.             {
  50.              str=str.remove(i,1);
  51.              i--;
  52.             }
  53.             ui->textEdit->setText(str);
  54.             for (int j=0;j<=tem_position;j++)
  55.             {
  56.                ui->textEdit->moveCursor(QTextCursor::NextCharacter,QTextCursor::MoveAnchor);
  57.             }
  58.         }



  59.     }
  60.     qDebug()<<"005:"<<str;
  61.     connect(ui->textEdit,SIGNAL(textChanged()),this,SLOT(on_textEdit_textChanged()));
  62. }
复制代码


使用特权

评论回复
 楼主 | 2019-7-20 13:49 | 显示全部楼层
  1. 以下是本次更新最终版:
  2.     for( int i=0;i<str.length();i++)
  3.     {

  4.         if(((i+1)%3)==0)
  5.          {
  6.            if(!(str.at(i)==' '))
  7.            {
  8.              str.insert(i,' ');
  9.              ui->textEdit_2->setText(str);
  10.              tem_position++;

  11.              {
  12.                  QTextCursor tc = ui->textEdit_2->textCursor();
  13.                  tc.setPosition(tem_position);
  14.                  ui->textEdit_2->setTextCursor(tc);
  15.              }


  16.             qDebug()<<"003:"<<str;

  17.            }
  18.          }
  19.         else
  20.         {
  21.             if(((str[i]>='0')&&(str[i]<='9'))||((str[i]>='A')&&(str[i]<='F')))
  22.             {
  23.             }
  24.             else
  25.             {
  26.              str=str.remove(i,1);
  27.              i--;
  28.              tem_position--;
  29.             }
  30.             ui->textEdit_2->setText(str);

  31.             {
  32.                 QTextCursor tc = ui->textEdit_2->textCursor();
  33.                 tc.setPosition(tem_position);
  34.                 ui->textEdit_2->setTextCursor(tc);
  35.             }

  36.         }

  37.     }
复制代码

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表