このページでは

C

タッチ入力の処理

このトピックでは、システム入力をQt Quick Ultralite と統合する方法について説明します。

概要

Qt Quick Ultraliteはデフォルトでタッチイベントとキーイベントをサポートしています。これらのイベントはplatforminterface/platforminterface.h ヘッダーファイルで定義されている以下の関数で処理されます。

注意: 上記の関数を ISR などから直接呼び出すと、Qt Quick Ultralite アプリケーションの状態が破損する可能性があります。代わりにQul::EventQueuePlatformContext::exec独自のキュー実装を使用することもできますが、その場合、上記の関数の呼び出しはQt Quick Ultraliteコンテキストでなければなりません。

シングルタッチシステムでは、Qul::Platform::SinglePointTouchEventDispatcher ヘルパークラスを使用してください。これはQul::PlatformInterface::handleTouchEvent() よりも、Qt Quick Ultraliteエンジンにタッチイベントを送信する便利な方法を提供します。後者のヘルパークラスでは、マルチタッチを自分で処理する必要があります。

デフォルトのタッチイベントとキーイベントの他に、Qul::EventQueue クラスを使用してカスタムイベントを送信することも可能です。この場合、カスタムイベントを受信するためのC++-QMLインターフェイスをアプリケーションに用意する必要があります。

入力処理の実装

通常、システムはタッチイベントやキーイベントを割り込み経由で受け取ります。システム入力をQt Quick Ultraliteと統合するには、システムの入力デバイスから受信した割り込みに対応するISRをセットアップします。ISRは入力データを解釈し、適切なフォーマットに変換し、さらに処理するためにQt Quick Ultraliteエンジンに送信します。

ディスパッチャを使ったタッチイベントの送信

前述のQul::Platform::SinglePointTouchEventDispatcher ヘルパークラスを使用したシングル・タッチ・システムの例を示します。わかりやすくするため、プラットフォーム固有の割り込み設定とタッチイベントデータを取得する関数はここでは示していません。

まず、シングル・ポイント・タッチ・イベント用のQul::EventQueueQul::Platform::SinglePointTouchEventDispatcher をプライベート・メンバーとして持つクラスを作成します。イベントは再実装されたQul::EventQueue::onEvent ()からディスパッチされる。また、イベント・キューの静的インスタンスも作成する。

class SinglePointTouchEventQueue : public Qul::EventQueue<Qul::Platform::SinglePointTouchEvent>
{
public:
    void onEvent(const Qul::Platform::SinglePointTouchEvent &event) QUL_DECL_OVERRIDE
    {
        touchEventDispatcher.dispatch(event);
    }

    void onQueueOverrun() QUL_DECL_OVERRIDE
    {
        clearOverrun();
        PlatformInterface::log("Touch event discarded/overwritten. Consider increasing the queue size.\n");
    }

private:
    Qul::Platform::SinglePointTouchEventDispatcher touchEventDispatcher;
};

static SinglePointTouchEventQueue touchEventQueue;

タッチコントローラからの割り込みを処理し、イベントをキューにポストするために、touchISR() 関数を実装します。

void touchISR()
{
    static Qul::Platform::SinglePointTouchEvent event;

    // Here would be platform specific code to fetch touch data and store
    // it into the x, y and pressed members of the the event.

    event.x = 0;
    event.y = 0;
    event.pressed = false;
    event.timestamp = Qul::Platform::getPlatformInstance()->currentTimestamp();

    touchEventQueue.postEventFromInterrupt(event);
}

注: PlatformContext::currentTimestamp を使用して、入力イベントのタイムスタンプがQt Quick Ultralite エンジンの他の部分と同じクロックであることを確認してください。

ビルドしてデバイスにフラッシュした後、スクリーンに触れると背景の色が変わるはずです。

これで移植ガイドの基本フェーズが完了し、状態をコミットできるようになりました。ここから紹介ページに戻り、推奨されるハードウェア・アクセラレーションを実装してください。


詳細はこちらをご覧ください。