QT制作字幕滚动效果

//.h文件
#include<QWidget>
classwidget:publicQWidget
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
public:
explicitwidget(QWidget*parent=0);
voidsetText(constQString&newText);
QStringtext()const{returnmyText;}
QSizesizeHint()const;

protected:
voidpaintEvent(QPaintEvent*event);
voidtimerEvent(QTimerEvent*event);
voidshowEvent(QShowEvent*event);
voidhideEvent(QHideEvent*event);
private:
QStringmyText;
intoffset;
intmyTimerId;

};
.cpp文件
#include"widget.h"
#include<QPainter>

#include<qcoreevent.h>

widget::widget(QWidget*parent):
QWidget(parent)
{
offset=0;
myTimerId=0;

}
voidwidget::setText(constQString&newText)
{
myText=newText;
update();
updateGeometry();

}
QSizewidget::sizeHint()const
{
returnfontMetrics().size(0,text());
}

voidwidget::paintEvent(QPaintEvent*event)
{
QPainterpainter(this);

inttextWidth=fontMetrics().width(text());
if(textWidth<1)
return;
intx=-offset;
while(x<width()){
painter.drawText(x,0,textWidth,height(),
Qt::AlignLeft|Qt::AlignVCenter,text());
x+=textWidth;
}

}
voidwidget::timerEvent(QTimerEvent*event)
{
if(event->timerId()==myTimerId){
++offset;
if(offset>=fontMetrics().width(text()))
offset=0;
scroll(-1,0);
}else{
QWidget::timerEvent(event);
}


}

voidwidget::showEvent(QShowEvent*event)
{
myTimerId=startTimer(40);
}

voidwidget::hideEvent(QHideEvent*event)
{
killTimer(myTimerId);
myTimerId=0;
}


main文件
#include<QApplication>
#include<widget.h>
#include<QTextCodec>
intmain(intargc,char*argv[])
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//解决乱码显示问题
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));//解决乱码显示问题
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));//解决乱码显示问题
QApplicationa(argc,argv);
widgetw;
w.setWindowTitle(QObject::tr("Ticker"));//设置标题
w.setText(QObject::tr("我爱你,亲爱哒"));//设置滚动的文字
w.show();
returna.exec();
}
posted on 2013-03-28 16:22  Q11三工鸟yue  阅读(2576)  评论(0编辑  收藏  举报