公司电脑做网站,网站功能需求说明,seo招聘职责,上海网络维护有限公司一、失去焦点检测
当窗口失去焦点时会发出FocusOut事件#xff0c;具体实现如下#xff1a; 首先给窗口安装事件过滤器#xff1a;
this-installEventFilter(this);然后在事件过滤器函数中判断有没有失去焦点
bool MessageDialog::eventFilter(QObject *object, QEve…一、失去焦点检测
当窗口失去焦点时会发出FocusOut事件具体实现如下 首先给窗口安装事件过滤器
this-installEventFilter(this);然后在事件过滤器函数中判断有没有失去焦点
bool MessageDialog::eventFilter(QObject *object, QEvent *event)
{if(event-type() QEvent::FocusOut){//窗口失去焦点了}return QDialog::eventFilter(object,event);
}二、窗口抖动实现
窗口抖动使用QPropertyAnimation来实现
1、QPropertyAnimation介绍
QPropertyAnimation是Qt提供的用于动画效果的类它可以对Qt对象的属性进行动画处理。通过改变属性的值可以实现平滑过渡、渐变效果等动画效果。
QPropertyAnimation继承自QAbstractAnimation类它通过使用插值器Interpolator来控制属性值的变化速度并通过使用适当的目标值和时间间隔来计算每一帧的属性值。
2、实现原理
在QPropertyAnimation添加位置左移位置-右移位置-左移位置…然后将动画主体设置为窗口启动动画就行。
3、实现源码
将动画封装成一个函数来使用
void MessageDialog::widgetShake(QWidget *widget, int range)
{int nX widget-x();int nY widget-y();QPropertyAnimation *pAnimation new QPropertyAnimation(widget,geometry);pAnimation-setEasingCurve(QEasingCurve::InOutSine);pAnimation-setDuration(300);pAnimation-setStartValue(QRect(QPoint(nX,nY),widget-size()));int nShakeCount 20; //抖动次数double nStep 1.0/nShakeCount;for(int i 1; i nShakeCount; i){range i1 ? -range : range;pAnimation-setKeyValueAt(nStep*i,QRect(QPoint(nX range,nY),widget-size()));}pAnimation-setEndValue(QRect(QPoint(nX,nY),widget-size()));pAnimation-start(QAbstractAnimation::DeleteWhenStopped);
}三、抖动函数使用
bool MessageDialog::eventFilter(QObject *object, QEvent *event)
{if(event-type() QEvent::FocusOut){this-widgetShake(this,50);}return QDialog::eventFilter(object,event);
}