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

来源:互联网 发布:什么漫画软件好 编辑:程序博客网 时间:2024/05/20 16:43

    • 鼠标的进入和离开的检测
    • 滚动字幕实现

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++;}

FreeApe

0 0