#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QPainter>

#include <QTimerEvent>

#include <QFont>

//#include "BannerWidget.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),m_nStep(0),

m_strText("QT007 QT文字变色术"),

ui(new Ui::MainWindow)

{



ui->setupUi(this);


setAutoFillBackground(true);


// 设置文字大小

QFont newFont = font();

newFont.setBold(true);

newFont.setPointSize(newFont.pointSize() + 40);

setFont(newFont);


m_timer.start(100, this);




}


MainWindow::~MainWindow()

{


m_timer.stop();

delete ui;

}

void MainWindow::paintEvent(QPaintEvent *event)

{

Q_UNUSED(event);


// 计算文本绘制的起始坐标

QFontMetrics metrics(font());

int x = (width() - metrics.width(m_strText)) / 2;

int y = (height() + metrics.ascent() - metrics.descent()) / 2;


QColor color;

QPainter painter(this);

for (int i = 0; i < m_strText.size(); ++i)

{

// 设置色调(H)、饱和度(S)、亮度(V)

int nIndex = (m_nStep + i) % 16;

color.setHsv((15 - nIndex) * 16, 255, 191);

painter.setPen(color);


// 单个字符绘制

painter.drawText(x, y, QString(m_strText[i]));


// 计算下一个字符的x坐标起始点

x += metrics.width(m_strText[i]);

}

}


void MainWindow::timerEvent(QTimerEvent *event)

{

Q_UNUSED(event);


if (event->timerId() == m_timer.timerId())

{

++m_nStep;

update();

}

else

{

QWidget::timerEvent(event);

}

}

void MainWindow::setText(const QString &text)

{

m_strText = text;

}




附件:http://down.51cto.com/data/2368315