QTextView::QTextView(QWidget *parent) :
QWidget(parent)
{
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()), this, SLOT(updateIndex()));
m_curIndex = 0;
pen.setWidth(5);
pen.setColor(QColor(0,255,0));
setText("众芳摇落独暄妍,占尽风情向小园。疏影横斜水清浅,暗香浮动月黄昏。霜禽欲下先偷眼,粉蝶如知合断魂。幸有微吟可相狎,不须擅板共金樽。");
m_font.setPixelSize(20);
setMinimumHeight(30);
}
void QTextView::setPen(){
}
void QTextView::paintEvent(QPaintEvent * e){
if(width!=e->rect().width()){
width = e->rect().width();
setText(text);
}
QPainter pp(this);
pp.fillRect(0,0,e->rect().width(),e->rect().height(),QColor(0,0,0));
pp.setPen(pen);
pp.setFont(m_font);
QFontMetrics fm(m_font);
int len = text_len-m_curIndex;
if(len<width&&text_len>width){
pp.drawText(-m_curIndex, height()-10,text);
pp.drawText(len+20, height() - 10, text);
}
else{
pp.drawText(-m_curIndex, height()-10,text);
}
}
void QTextView::setText(QString t){
QFontMetrics fm(m_font);
text_len = fm.width(t);//每个字符的宽度
text = t;
if(text_len>width){
if(!timer->isActive())
timer->start(12);
}
else{
if(timer->isActive())
timer->stop();
}
update();
}
void QTextView::updateIndex(){
m_curIndex+=0.5;
int len = text_len>width?text_len:width;
if (m_curIndex > len+20)
m_curIndex = 0;
update();
}
QTextView::~QTextView(){
if(timer->isActive())
timer->stop();
delete timer;
}