您的位置:首页 > 编程语言 > Qt开发

QT制作字幕滚动效果

2013-03-28 16:22 253 查看
//.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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: