Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281406
  • 博文数量: 59
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 17:17
文章分类

全部博文(59)

文章存档

2012年(9)

2011年(50)

分类: C/C++

2011-09-03 10:05:52

源码来源于C++ GUI Qt4编程第二版
 
在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();
 }}
 
阅读(1763) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~