2

タッチスクリーン付きの小さな ARM 組み込み Linux デバイスで Qt 4.8.3 を使用しています。タッチスクリーンを tslib で構成して調整したので、/etc/ にポインターカル ファイルがあります。タッチイベントの場所は問題なく機能しますが、Mouse Press または Mouse Release Events の前に Mouse Move の QEvent を取得しても問題ありません。さらに、タッチスクリーンから物理的に指を離すまで、マウス関連のイベントは発生しません。タッチスクリーンを押してすぐにマウスダウンイベントを受け取り、次に移動イベント (ある場合) を受け取り、指を離したときにマウスリリースイベントを受け取るという通常の動作が必要です。

So what I'm seeing from the point of view of events received when I pressed down and then release looks like:

50 SockAct <-- Received right at press down
           <-- NO Other events received until press released
           <-- Now release by lifting finger from screen
50 SockAct <-- Immediately received a 50 ( SockAct ) and the rest of the events below:
2          <-- 2 == mouse down
2          <-- 2 == mouse down
3          <-- 3 == mouse release / up
3          <-- 3 == mouse release / up
77         <-- 77 == redraw

また、次の qwsEventFilter を実装して、QApplication に入ってくる QWS イベントを監視することで、QWS Server イベントを調べようとしました。

/// For investigation mouse events
#include <QWSServer>
#include <QWSMouseHandler>
#include <QWSEvent>

bool GUIApp::qwsEventFilter(QWSEvent *e)
{

    qDebug() << e->type;

    if(e->type == QWSEvent::Mouse) {

        QWSMouseHandler *curMouse = QWSServer::mouseHandler();
        qDebug() << "mouse position is: " << curMouse->pos();

    }

    return false;

    /*
    QWSEvent::NoEvent   0   No event has occurred.
    QWSEvent::Connected 1   An application has connected to the server.
    QWSEvent::Mouse 2   A mouse button is pressed or released, or the mouse cursor is moved. See also Qt for Embedded Linux Pointer Handling.
    */

}

ここで、アプリを起動すると、画面に触れた後に同じ動作が見られます。つまり、次のように出力されます。

2 <-- Nothing is printed until I release my finger from the screen!
mouse position is:  QPoint(89,312) 
2 
mouse position is:  QPoint(89,312) 

ご覧のとおり、指を離すとすぐに 2 つのイベントが発生します。おそらく押し下げて離します。

Linux の /dev/input/touchscreen デバイスで「evtest」を実行しましたが、画面を押し下げるとすぐにタッチダウン イベントが表示されます。また、指を離すまでマウス リリース イベントが発生しないため、ドライバーは期待どおりに動作します。押しても「繰り返し」のタッチダウンイベントはありません.1回の押し下げに対して1つのイベントですが、正しく動作します。

なぜ自分の行動を見ているのかわかりません。Qt と入力デバイスの間に変換の問題があるはずです。

さらに、MouseButtonRelease 受信イベントの処理にわずか 3 ミリ秒の遅延を追加すると、アプリの動作に関して望ましい動作が得られますが、プレスを放すまでマウス イベントを受信しません。遅延をまったく追加する必要はありません。マウスダウンが発生し、次に移動し、最後にマウスアップイベントが順番に発生することを期待します

これを修正する方法、またはこれを引き起こしている可能性のあるものを知っている人はいますか?? どうもありがとうございました!

--

実際に指を離すまで、次の出力が表示されません。

...
MOVE TYPE:  5 
"Mouse move (382,129)" 
MOUSE BUTTON PRESS TYPE:  2 
"Mouse Button Press (1)" 
MOUSE BUTTON RELEASE TYPE:  3 
"Mouse Button Release (1)" 
....

アプリで受信したイベントを調べる eventFilter は次のとおりです。

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Just for kicks print out the mouse position
if (event->type() == QEvent::MouseButtonPress)
{
    qDebug() << "MOUSE BUTTON PRESS TYPE: " << event->type();
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    qDebug() << QString("Mouse Button Press (%1)").arg(mouseEvent->button());
}
if (event->type() == QEvent::MouseMove)
{
    qDebug() << "MOVE TYPE: " << event->type();
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    qDebug() << QString("Mouse move (%1,%2)").arg(mouseEvent->globalX()).arg(mouseEvent->globalY());
}
if (event->type() == QEvent::MouseButtonRelease)
{
    qDebug() << "MOUSE BUTTON RELEASE TYPE: " << event->type();
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    delay();
    qDebug() << QString("Mouse Button Release (%1)").arg(mouseEvent->button());
    //return true; // Gobble the event
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////

ここに私の遅延関数があります:

void Monitor::delay()
{
    QTime dieTime = QTime::currentTime().addMSecs(3);
    while( QTime::currentTime() < dieTime )
    QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
4

1 に答える 1

1

解決済み - このスレッドを見つけました: https://github.com/kergoth/tslib/issues/10同じ問題の概要を説明しています。Atmel MXT Maxtouch ドライバーを使用した Tslib の問題のようです。ts.conf ファイルの Variance モジュールをコメント アウトすることで問題が解決しました。画面に触れた直後にマウス ダウン イベントが発生するようになりました。

于 2013-01-15T19:06:53.720 に答える