打印

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

[复制链接]
714|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2019-7-20 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能描述1:
有一个文本输入框,当往里面输入文本,或者粘贴文本时候,触发事件
实现:textChanged()
功能描述2:全部大写显示
实现:toUpper()
功能描述3:
当输入的文本内容含有非16进制字符(a~F,A~F,0~9)时候删除这些字符.
            if((str[i]>='0')&&(str[i]<='9'))
            {
            }
       else if ((str[i]>='A')&&(str[i]<='F'))
            {
            }
            else
            {
             str=str.remove(i,1);
             i--;
            }


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


           }
         }


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



使用特权

评论回复

相关帖子

沙发
gaoyang9992006|  楼主 | 2019-7-20 11:25 | 只看该作者
#include "hex.h"
#include "ui_hex.h"
#include "qdebug.h"
Hex::Hex(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Hex)
{
    ui->setupUi(this);
}

Hex::~Hex()
{
    delete ui;
}

void Hex::on_textEdit_textChanged()
{
    ui->textEdit->disconnect();
    QString str =ui->textEdit->toPlainText();
    int tem_position=ui->textEdit->textCursor().position();
    qDebug()<<"001,length:"<<str.length();
    qDebug()<<"002,size:"<<str.size();
    qDebug()<<"003:"<<str;
    if(str.length()>0)
    qDebug()<<"004:"<<str.at(str.length()-1);
    qDebug()<<"--------------------------------";
str=str.toUpper();
    for( int i=0;i<str.length();i++)
    {

        if(((i+1)%3)==0)
         {
           if(!(str.at(i)==' '))
           {
             str.insert(i,' ');
             ui->textEdit->setText(str);
             for (int j=0;j<=tem_position;j++)
             {
                ui->textEdit->moveCursor(QTextCursor::NextCharacter,QTextCursor::MoveAnchor);
             }


           }
         }
        else
        {
            if((str[i]>='0')&&(str[i]<='9'))
            {
            }
       else if ((str[i]>='A')&&(str[i]<='F'))
            {
            }
            else
            {
             str=str.remove(i,1);
             i--;
            }
            ui->textEdit->setText(str);
            for (int j=0;j<=tem_position;j++)
            {
               ui->textEdit->moveCursor(QTextCursor::NextCharacter,QTextCursor::MoveAnchor);
            }
        }



    }
    qDebug()<<"005:"<<str;
    connect(ui->textEdit,SIGNAL(textChanged()),this,SLOT(on_textEdit_textChanged()));
}


使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2019-7-20 13:49 | 只看该作者
以下是本次更新最终版:
    for( int i=0;i<str.length();i++)
    {

        if(((i+1)%3)==0)
         {
           if(!(str.at(i)==' '))
           {
             str.insert(i,' ');
             ui->textEdit_2->setText(str);
             tem_position++;

             {
                 QTextCursor tc = ui->textEdit_2->textCursor();
                 tc.setPosition(tem_position);
                 ui->textEdit_2->setTextCursor(tc);
             }


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

           }
         }
        else
        {
            if(((str[i]>='0')&&(str[i]<='9'))||((str[i]>='A')&&(str[i]<='F')))
            {
            }
            else
            {
             str=str.remove(i,1);
             i--;
             tem_position--;
            }
            ui->textEdit_2->setText(str);

            {
                QTextCursor tc = ui->textEdit_2->textCursor();
                tc.setPosition(tem_position);
                ui->textEdit_2->setTextCursor(tc);
            }

        }

    }

使用特权

评论回复
地板
nogatools| | 2020-2-22 19:12 | 只看该作者
if(str.length()>0)

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1957

主题

15903

帖子

207

粉丝