我想注册一个QtQuick的Android应用程序中打开某些类文件,并处理它们。
从我所收集,当一个文件被打开了QApplication
它导致QEvent::FileOpen
被解雇。
这个最强的(如果不确定的)证据,我已经是这个提交在生产系统中发现,加了一些博客文章和谷歌的结果。
所以,我首先创建一个新的空QtQuick项目 。
我写一篇EventFilter ,就像这样:
#include <QtGui>
#include <QApplication>
#include <QFileOpenEvent>
class MyEventFilter : public QObject {
public:
MyEventFilter();
virtual ~MyEventFilter();
protected:
virtual bool eventFilter(QObject* object,QEvent* event);
};
#include "myeventfilter.h"
MyEventFilter::MyEventFilter() : QObject () {}
MyEventFilter::~MyEventFilter() {}
bool MyEventFilter::eventFilter(QObject* object,QEvent* e) {
qDebug() << "Received" << e->type();
if (e->type() == QEvent::FileOpen) {
QFile file(static_cast<QFileOpenEvent *>(e)->file());
qDebug() << "File to open:" << file.fileName();
// This is where I would do stuff
return true;
} else {
return QObject::eventFilter(object,e);
}
}
然后我进行注册 ,并相应地编辑我的表现 ,通过增加
<intent-filter android:label="Foo File" android:priority="1">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="file" android:host="success"/>
<data android:host="*"/>
<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.foo"/>
</intent-filter>
在这一点上,我启动我在Android模拟器应用。
当我打开一个.foo
在我的AVD从ES文件浏览器文件适用于Nexus 5,API 22,我的应用程序确实在前台带来的 ,但没有 FileOpen
的事件记录。
如果设置我的过滤方法中的断点我似乎没有被击中它。
这让我为难。
我通过扩展尝试了另一种方法QApplication
和超载event(QEvent *)
以几乎相同的结果(没有命中)。
还有什么比我做错了?
请找到该MWE完整的仓库在这里 。