所谓屏保就是在没有任何操作到达一定时间后启动的。
在qt下实现的方法就是给QApplication安装事件过滤器,当然继承QApplication重写notify()函数也是可以的。因为notigy函数是整个应用程序第一时间获取到键盘、鼠标...事件的函数。
我采用的是安装事件过滤器的方法,因为这样就不要继承QApplication类了。但是需要在一个类中实现eventFilter()函数,然后给QApplication对象安装事件过滤器指定该类即可。
下面是我的代码:
bool myobject::eventFilter(QObject *ob, QEvent *e)
{
if(e->type()==QEvent::MouseMove)// 判断如果是鼠标移动事件
{
if(!have_dosth)//标志是否有过鼠标操作变量
{
have_dosth=true;
}
if(have_dosthtimer->isActive())//have_dosthtimer很显然是个定时器,在这判断是否已经开启.
{
have_dosthtimer->stop();
have_dosthtimer->start(1000*30);//如果已经开启,并且有鼠标移动事件就需要计时器重新计算(这里是30s)
qDebug()<<"have_dosthtimer restart";
}
}
return QObject::eventFilter(ob,e);//其他事件仍然交给系统处理。这句一定不能少。
}
/*这个是have_dosthtimer定时器链接的槽函数,如果时间到了发送信号实现屏保功能*/
void myobject::slot_JodjeDosth()
{
if(have_dosth)
{
have_dosth=false;
emit signal_have_dosth();
qDebug()<<"emit signal_have_dosth";
}
}
在mian函数中是这样写的:
myobject *object = myobject::getMyObject(); //用的是单实例模式
a.installEventFilter(object);//a是QApplication的实例,给a安装事件过滤器。
以上是自己写的解决方法,留作备忘!路过的朋友有好的建议欢迎指正~!