- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
Qt使用事件与定时器实现字幕滚动效果
目录1、效果展示2、实现思路3、滚动窗口部件3.1、成员变量3.2、事件重写3.3、成员方法3.4、方法实现
1、效果展示
我们经常能够在外面看到那种滚动字幕,那么就拿qt来做一个吧。
2、实现思路
实现一个窗口部件,这个窗口部件显示了一串文本标语,它会每t毫秒向左移动一个像素。如果窗口部件比文本宽,那么文本将会被多次重复,直到能够填满整个窗口部件的宽度为止。
3、滚动窗口部件
创建一个滚动窗口类,将其命名为ticker。
3.1、成员变量
我们需要提供几个成员变量。
myText用来表示要显示的文本内容。offset表示当前偏移量。myTimerId表示定时器的ID编号。
QStringmyText;
intoffset;
intmyTimerId;
3.2、事件重写
需要重新实现了Ticker中的4个事件处理器,分别为paintEvent()、timerEvent()、showEvent()和hideEvent();关于每个事件的职责后面再说。
virtualvoidpaintEvent(QPaintEvent*event)override;//绘制事件
virtualvoidtimerEvent(QTimerEvent*event)override;//定时器事件
virtualvoidshowEvent(QShowEvent*event)override;//显示事件
virtualvoidhideEvent(QHideEvent*event)override;//隐藏事件
3.3、成员方法
还需要提供几个成员方法。关于每个方法的职责后面再说。
voidsetText(constQStringnewText);
QStringtext()const{returnmyText;}
QSizesizeHint()const;
3.4、方法实现
1.构造函数
构造函数把offset变量初始化为0。用来绘制文本的x坐标值就取自于这个offset值。
定时器的ID通常是非零的,所以可以使用0来表示定时器还没有启动。
Ticker::Ticker(QWidget*parent)
:QWidget{parent}
offset=0;
myTimerId=0;
}
2.setText函数
setText()函数用来设置要显示的文本。它调用update()强制执行一个重绘操作,并且调用updateGeometry()通知对Ticker窗口部件负责的布局管理器,提示该窗口部件的大小发生了变化。
voidTicker::setText(constQStringnewText)
myText=newText;
update();
updateGeometry();
}
3.sizeHint函数
sizeHint()函数返回文本所需的空间大小,并以此作为窗口部件的理想尺寸。QWidget::fontMetrics()函数返回一个QFontMetrics对象;可以用这个对象查询并获得与这个窗口部件字体相关的信息。
QSizeTicker::sizeHint()const
returnfontMetrics().size(0,text());
}
4.paintEvent事件
paintEvent()函数使用QPainter::drawText()绘制文本。它使用fontMetrics()确定文本在水平方向上所需要的空间,并且在考虑offset值的同时,多次绘制文本,直到能够填充整个窗口部件的宽度为止。
voidTicker::paintEvent(QPaintEvent*event)
QPainterpainter(this);
inttextWidth=fontMetrics().width(text());
if(textWidth1)
return;
intx=-offset;
while(xwidth())
painter.drawText(x,0,textWidth,height(),Qt::AlignLeft|Qt::AlignVCenter,text());
x+=textWidth;
}
5.timerE
您可能关注的文档
最近下载
- AC 阿特拉斯 30-75KW 使用维护零件手册 说明书 AII-S-454-06 - GA 30+-75.ppt VIP
- 207页《华为数字化转型之道》读书笔记课件.pptx VIP
- 3.1提高大面积屋面施工一次验收合格率-弘明·澜湖郡QC小组.doc VIP
- 六年级语文阅读理解练习(含答案)20篇.pdf VIP
- 高边坡安全技术交底.docx VIP
- 2024年10月26日吉林省市直遴选笔试真题及答案解析(政治理论素养卷).doc VIP
- 中国氯气项目创业计划书.docx
- 湿法冶金技术.pptx VIP
- 中国蛋白粉行业市场全景评估及发展战略规划报告.docx VIP
- 降低肿瘤患者化疗后恶心呕吐(CINV)发生率.pptx VIP
文档评论(0)