QtQuick Android アプリケーションを登録して、特定のクラスのファイルを開いて処理しようとしています。
私が収集したものから、ファイルが で開かれると、解雇されますQApplication
。QEvent::FileOpen
これについて私が持っている最も強力な (決定的でない場合) 証拠は、実稼働システムで見つかったこのコミット、および多数のブログ投稿と Google の検索結果です。
そこで、まず新しい空の QtQuick プロジェクトを作成します。
#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
Nexus 5、API 22 を使用して AVD で ES ファイル エクスプローラーからファイルを開くと、アプリケーションは確かにフォアグラウンドに移動しますが、 FileOpen
イベントはログに記録されません。
フィルター メソッド内にブレークポイントを設定すると、ヒットしていないようです。
これは私を困惑させます。
ほぼ同じ結果(ヒットなし)で拡張QApplication
およびオーバーロードすることにより、別のアプローチを試しました。event(QEvent *)
私は何が間違っているのでしょうか?
この MWE の完全なリポジトリは、こちら にあります。