在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();
}}