标题:Qt--滚动字幕(传说中的跑马灯)【搞定】
作者:longwenbiao
日期:2010-06-12 17:04
内容:
小弟最近在做一个LED的模拟程序,碰到了一个问题:
用的是下面这个widget,用来显示滚动字幕,这个程序不错,但是如果动态改变滚动字符的话,滚动字幕会跳动,求高手指教实现平滑改变的方法
请看这里 http://www.qtcn.org/bbs/read.php?tid=25689 9楼贴的方法
#1 Qt--字幕滚动的程序,也就是传说中的跑马灯 [longwenbiao 06-12 16:58]
小弟最近在做一个LED模拟程序,碰到一个郁闷的问题:
使用的事这个东东,用来模拟滚动字符label,这个程序估计很多人都看过,问题是如果滚动字符动态改变了,那么会有抖动的效果,不知道怎么是好,请高手指教下。头文件
#ifndef TICKER_H
#define TICKER_H
#include
class Ticker : public QWidget
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
public:
Ticker(QWidget *parent = 0);
void setText(const QString &newText);
QString text() const { return myText; }
QSize sizeHint() const;
protected:
void paintEvent(QPaintEvent *event);
void timerEvent(QTimerEvent *event);
void showEvent(QShowEvent *event);
void hideEvent(QHideEvent *event);
private:
QString myText;
int offset;
int myTimerId;
};
#endif
cpp文件#include
#include "ticker.h"
Ticker::Ticker(QWidget *parent)
: QWidget(parent)
{
offset = 0;
myTimerId = 0;
}
void Ticker::setText(const QString &newText)
{
myText = newText;
update();
updateGeometry();
}
QSize Ticker::sizeHint() const
{
return fontMetrics().size(0, text());
}
void Ticker::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
int textWidth = fontMetrics().width(text());
if (textWidth < 1)
return;
int x = -offset;
while (x < width()) {
painter.draw ..
#2 [longwenbiao 06-13 08:38]
顶顶
#3 [cahwxy 06-13 08:50]
我自己用Label 自己定制了一个
原理就是:首先计算字符串的长度,在算出每个字符的像素长度,确定显示区
加个定时器,每一个时间间隔显示几个像素,就达到走马灯的效率
#4 回 3楼(cahwxy) 的帖子 [longwenbiao 06-13 10:38]
如果显示的字符突然变化了,会不会出现抖动的现象。我这个程序实时性比较高,所以一定要消除抖动现象
#5 回 3楼(cahwxy) 的帖子 [longwenbiao 06-13 10:42]
3楼,我的QQ:345931986,能和你讨论下吗?