Qt4 ticher滚动


在widget中描绘文字事件
void Ticker::paintEvent(QPaintEvent *)
{ QPainter painter(this);
int textWidth = fontMetrics().width(text()); //返回text()文本内容在水平方向上的宽度text()里面的内容是setText函数中参数的内容
if (textWidth < 1) return;
int x = -offset; //offset偏移量
while (x <=width())
{ painter.drawText(-x-textWidth, 0, textWidth, height(), Qt::AlignRight |Qt:: AlignVCenter, text()); x += textWidth; }}
painter.drawText()是在矩形宽内描述文字//矩形坐标起点(-x-textWidth,0),高和宽textWidth, height(),居中显示text文本中的内容-x-textWidth,设置了原点,是为了向右移动 
 
 时间定时事件void Ticker::showEvent(QShowEvent *)
{ myTimerId = startTimer(30);}
void Ticker::timerEvent(QTimerEvent *event)
{ if (event->timerId() == myTimerId)
{ ++offset; if (offset >= fontMetrics().width(text())) offset = 0;
 scroll(1, 0); //scroll(-1, 0)向左滚动,scroll(1, 0)向右滚动,scroll(0, -1)从上向下移动,scroll(0,1)是从下向上移动scroll每次移动都会偏移一个像素。这条语句之后就会去执行paintEvent事件 }
else { QWidget::timerEvent(event); }}
上面就得到了文字是从左向右滚动  
 
 下面是文字从右往左移动
void Ticker::paintEvent(QPaintEvent */* event */)
{ QPainter painter(this);
int textWidth = fontMetrics().width(text());
if (textWidth < 1) return; int x = -offset;
 while (x < width())
{
painter.drawText(x, 0, textWidth, height(), Qt::AlignLeft | Qt::AlignVCenter, text());
//矩形坐标起点(x,0),高和宽textWidth, height(),居中显示text文本中的内容 x += textWidth; }}
 
void Ticker::showEvent(QShowEvent */* event */)
{ myTimerId = startTimer(30);}void Ticker::timerEvent(QTimerEvent *event)
{ if (event->timerId() == myTimerId)
{ ++offset; if (offset >= fontMetrics().width(text())) offset = 0; scroll(-1, 0); //滚动方向 } else { QWidget::timerEvent(event); }}  
 
下面是鼠标按下事件以及鼠标拖动事件
void Ticker::mousePressEvent(QMouseEvent * e)
{ if(e->button()==Qt::LeftButton)
 { dragPosition = e->globalPos() - frameGeometry().topLeft();
//frameGeometry().topLeft()是指矩形的左定点坐标位置。确定光标的位置在任意位置
e->accept(); }
if(e->button()==Qt::RightButton)
{ close(); }}
void Ticker::mouseMoveEvent(QMouseEvent * e)
{ if(e->buttons() && Qt::LeftButton)
{ move(e->globalPos() - dragPosition); //搬动窗口 e->accept();
 }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值