#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();
}
QT中文字循环,文本超出与不超出情况
最新推荐文章于 2022-10-26 17:39:55 发布