QT中文字循环,文本超出与不超出情况

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QFont>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //空格:6,tab:6,字母:6,中文:12
    charwidth= fontMetrics().width("啊");//每个字符的宽度

    //绑定时钟,持续更新文字
    connect(&timer, &QTimer::timeout, this,&MainWindow::updateIndex);
    timer.start(300);

}

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





//更新循环播放文字
void MainWindow::updateIndex()
{
    this->update();
    curindex++;
    if((ui->lineEdit->text().size()*12) > this->width())//文本超出,
    {
        if(curindex > ui->lineEdit->text().size())//直接读取到末尾
        {
            curindex=0;
        }
    }
    else//文本未超出,
    {
        if (curindex*12 > this->width())
        {
             curindex = 0;
        }
    }







}



//文本输入框文本变化
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{

    qDebug()<<"框"<<this->size();
    qDebug()<<"文本"<<arg1.size()*12;
    this->update();

}




//绘画事件
void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter pat(this);
    if((ui->lineEdit->text().size()*12) > this->width())//文本超出
    {
         qDebug()<<"文本out";
         //QString x = "Nine pineapples";
         //QString y = x.mid(5, 4);            // y == "pine"
         pat.drawText(0, 70, ui->lineEdit->text().mid(curindex,this->width()/12));
         if((ui->lineEdit->text().size()-curindex) < this->width()/12)
         {
             //文本超出,到达末尾,需要从开头进行补
              pat.drawText(12*(ui->lineEdit->text().size()-curindex), 70, ui->lineEdit->text().left(curindex));
         }


    }
    else//文本未超出
    {
        qDebug()<<"文本in";
        pat.drawText(0, 70, ui->lineEdit->text().mid(curindex));
        pat.drawText(this->width() - 12*curindex, 70, ui->lineEdit->text().left(curindex));


    }
    pat.end();


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值