回复: qt屏保 如何捕获全屏的鼠标事件[已经解决]
#11 [cutemmll 05-11 15:10]
首先,如果要重新实现 QApplication:notify() ,是要建立在这个函数能被系统鼠标事件所触发,你首先要去确认在你的程序最小化时,系统鼠标事件能不能触发这个函数被调用。如果不能触发这个函数调用,你再怎么重新实现都是白搭。
个人认为,这个函数是不会被调用的,除非你用win32 的 hook 才能截获到系统的鼠标或者键盘事件。
弱弱地问一句,你的屏保是要运行在Windows下么??如果不是运行在Windows下,那前面的所有讨论都失去意义了。
#12 [gjf123 05-11 17:11]
嵌入式linux系统,程序窗口大小固定
#13 [cutemmll 05-11 17:53]
那就去重载 bool QApplication::qwsEventFilter ( QWSEvent * event ) 这个函数
重载的方法基本上就是下面这个样子
application.h
#ifndef APPLICATION_H
#define APPLICATION_H
#include
#include
class Application : public QApplication
{
public:
Application(int & argc, char ** argv);
bool notify(QObject *, QEvent *);
bool qwsEventFilter(QWSEvent * event);
};
#endif // APPLICATION_H
application.cpp
#include "application.h"
Application::Application(int &argc, char **argv):
QApplication(argc,argv)
{
}
bool Application::notify(QObject *obj, QEvent *e)
{
//do something
return QApplication::notify(obj,e);
}
bool Application::qwsEventFilter(QWSEvent *event)
{
//do something
return QApplication::qwsEventFilter(event);
}
main.cpp
#include "application.h"
#include "mainwindow.h"
int main(int argc, char *argv[])
{
Application a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
上面两个函数你分别重载看下到底哪个有用,还是都没有用。我好久都没摸过arm板了。
#14 [peterlin82 05-12 08:11]
非常感谢cutemmll大侠的解说
小弟按照cutemmll大侠的做法,确实可抓到所有鼠标事件
bool Application::notify(QObject *obj, QEvent *e)
{
if(e->type() == QEvent::MouseButtonPress)
{
//do something
}
return QApplication::notify(obj,e);
}
再三感谢。
#15 [闲雨 05-12 10:25]
peterlin82你说的这个可以吗?
bool Application::notify(QObject *obj, QEvent *e)
{
if(e->type() == QEvent::MouseButtonPress)
{
//do something
}
return QApplication::notify(obj,e);
}
我自己也编译了一下,没有错误,但是运行的时候会报错的,系统无法运行