您的位置:首页 > 编程语言 > Qt开发

QT---字幕滚动效果,检测鼠标进入和离开控制字幕滚动

2015-05-21 22:14 316 查看
鼠标的进入和离开的检测

滚动字幕实现

1. 鼠标的进入和离开的检测

【方法一】重写构件的enterEvent()、leaveEvent()方法。注意,focusInEvent()和focusOutEvent()这两个函数是判别该控件是否聚焦的,只要在控件在操作上(包括程序操作)有改变,都会促发这两个函数。
如重写label构件方法,


.h文件


classLabel:publicQLabel
{
    Q_OBJECT
    public:
    explicitLabel(QWidget*parent=0);
    protected:
    voidenterEvent(QEvent*event);
    voidleaveEvent(QEvent*event);
};


.cpp文件


voidLabel::enterEvent(QEvent*event)
{
    qDebug()<<"enter";
}
voidLabel::leaveEvent(QEvent*event)
{
    qDebug()<<"leave";
}


然后用重写的类去创建实例。

【方法二】用事件过滤器,eventFilter()。

Qt的事件模型中提供的事件过滤功能使得一个QObject对象可以监视另一个QObject对象中的事件,通过在一个QObject对象中安装事件过滤器可以在事件到达该对象前捕获事件,从而起到监视该对象事件的效果。事件过滤器可以实现在窗体中监视全部控件的不同事件,方便实现功能扩展。若一个窗体中包含多个控件的话,再用重写的方式就有点麻烦了,所以就用事件过滤器来实现。

.h文件


publicslots:
booleventFilter(QObject*,QEvent*);


.cpp文件


boolMainWindow::eventFilter(QObject*watched,QEvent*even)
{
if(watched==ui->m_scrollCaptionLabel)//判断控件
{
    if(event->type()==QEvent::Enter)//然后再判断控件的具体事件
    {
        qDebug()<<"filterenter";
        returntrue;
    }
    if(event->type()==QEvent::Leave)//然后再判断控件的具体事件
    {
        qDebug()<<"filterleave";
        returntrue;
    }
}
    qDebug()<<"...";
    returnQWidget::eventFilter(watched,event);//调用基类函数,把事件传递下去
}


2. 滚动字幕实现

滚动字幕(跑马灯效果):利用定时器,在固定的时间间隔(这里为500毫秒)截取文本,来实现滚动效果。


scrollStr=QStringLiteral("滚动字幕(跑马灯效果):利用定时器,在固定的时间间隔(这里为500毫秒)截取文本,来实现滚动效果");
timer=newQTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(scrollSlot()));
timer->start(500);
------------------------------------------------------
voidMainWindow::scrollSlot()
{
    staticintnPos=0;
    if(nPos>scrollStr.length())
    {
        nPos=0;
    }
    ui->scrollLabel->setText(scrollStr.mid(nPos));
    nPos++;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: