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();
 }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值