2016-08-08 30 views
1

ここでは面白い問題があります。埋め込まれたQt GUI上でカーソルを隠すか、カーソルを取り除くために多くのスレッドが見つかりました...しかし、にカーソルを移動しようとしていますが、組み込みのQt GUIにが表示されています。埋め込まれたQtマウスポインタが表示されない

私は、ある時間前に「終了」したプロジェクトを継承し、プロジェクトで最も多く仕事をした人は移動しました。今日まで早送りし、この機能的なタッチスクリーンGUIにカーソルを追加する必要があります。システムOSはYocto Linuxで、フレームバッファ上でQt 5.4アプリケーションを実行しています。

私はQtコードを精査しましたが、カーソルを隠すことはありませんでした。 Qt起動スクリプトに適切なQT_QPA_FB_HIDECURSOR = 0環境変数を追加しました。私は、QCursorオブジェクトをGUIに追加して実験しました。残念ながら、これらのことのどれも働いていません。 QCusorを使用すると、私はときどき画面上にカーソルを上げることができますが、タッチ入力には結び付けられていません(カーソルはプログラムで移動する位置に現れますが、GUIとやりとりするとそこにとどまります) 。 (QT_QPA_GENERIC_PLUGINS = evdevtouch及びQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS =は/ dev /入力/ event9介し= 180回転)

マイタッチ入力イベントは、Qtのに結ばれているが、タッチ入力何らかの理由カーソルに接続することができません。

この時点で私は環境変数とスタートアップスクリプトの変更を混乱させてしまいましたが、私が探している結果はありません。

誰にもこの問題の解決策を探すためのアイディアがありますか?

ありがとうございます! イアン

答えて

3

にそれを設定してみてください、今3ヶ月後、私は私のチームと私は、この問題に対するまずまずの解決策を考え出したと思います。

「libinputの使用」のQt Documentationで解決策への道が始まりました。マウスカーソルが現れ、デバイスノード名などの

パラメータは、環境変数QT_QPA_EVDEV_MOUSE_PARAMETERSに設定することができQT_QPA_EVDEV_KEYBOARD_PARAMETERSとQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS


:ドキュメントには、いくつかの重要な書類に沸きますQT_QPA_EGLFS_HIDECURSOR(eglfsの場合)またはQT_QPA_FB_HIDECURSOR(linuxfbの場合)が設定されておらず、少なくとも1つのマウスが利用可能であることをQtのlibudevベースのデバイス検出が報告するたびに、 libudevサポートが存在しない場合、環境変数で明示的に無効にしない限り、マウスカーソルが常に表示されます。


evdevtabletプラグインはワコムと同様の、ペンベースのタブレットのための基本的なサポートを提供します。 QTabletEventイベントのみを生成します。これを有効にするには、環境内でQT_QPA_GENERIC_PLUGINS = evdevtabletを渡すか、コマンドラインで-plugin evdevtablet引数を渡します。プラグインは、Qtの自動デバイス検出(libudevまたは/ dev/input/event *のウォークスルーに基づく)が機能していないか、誤動作している場合に備えて、デバイスノードのパラメータ(例えばQT_QPA_GENERIC_PLUGINS = evdevtablet:/ dev/event1)を取ることができます。 EVENT0EVENT1イベント2event3event4event5マウス、および


だから、私のシステムでは、私はデバイスノードを持っていますmouse0マウスを稼働させようとしているので、私はmouse0ノードを使用しなければならないと仮定しました。これは私にこれらの環境変数を設定します:

QT_QPA_GENERIC_PLUGINS=evdevmouse 
QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/mouse0 

これらの環境変数は何ももたらされませんでした。当社yoctoビルドの下qtbaseディレクトリにソースコードを変更する

  • (約/ yocto/poky /構築を/ tmp /仕事:いくつかの時間後に私のチームと私は、我々のシステム上のQtソースからデバッグ出力を取得する方法を考え出しました/ 一時ビルドディレクトリ/qtbase
  • コピーqtbase /プラグイン/ジェネリック/ libqevdevmouseplugin.so私のハードウェアに(大体は/ usr/libに/ qt5 /プラグイン/汎用)コマンドラインからのQtを実行

私たちはすぐに入力前夜マウス0およびから来るntsは、基本的にはガベージデータであった。私たちのシステムではカーネルにEVDEVを設定したので、マウス入力もデバイスノードevent0に結びついていました。 Qtマウスパラメータをevent0に設定しようとしたところ、実際のデータのように見えるデバッグ出力が見え始めました。

QT_QPA_GENERIC_PLUGINS=evdevmouse 
QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0 

しかし、マウスポインタがないという問題は依然として残っていました。しばらくすると、上記の第2段落のQtドキュメンテーションを振り返りました。土壇場の試みとして、我々は出来上がり

QT_QPA_GENERIC_PLUGINS=evdevmouse 
QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0 
QT_QPA_FB_HIDECURSOR=0 

そして... ... QT_QPA_FB_HIDECURSOR環境変数に追加してみました!無数の時間のデバッグとドキュメントの読み込みの後、私たちは最終的にマウスポインタを取得しました。

私たちの問題の主な要点は、Qtドキュメントを誤解していたと思います。

いつでもマウスカーソルが表示されます。(linuxfb用)QT_QPA_FB_HIDECURSORは、「設定されていない」と

を設定していないで、Qtは明示的にFALSEと定義を意味します...単にすべてで「設定されていません」ではありません。

このソリューションは私たちのために機能しますが、少なくとも1つのことが望まれます。途中で私はthis thread answer on the Unix StackExを見つけました。カーネルのドキュメントinput/input.txtを指しています。 - 「マウス」

各「マウス」デバイスは 最後の1を除いて、単一のマウスまたはデジタイザに割り当てられている:「3.2.2 MOUSEDEV」セクションでは、ラインを見ることができます。この単一文字デバイスはすべての マウスとデジタイザで共有されており、接続されていない場合でもデバイスは です。これはUSBマウスをホットプラグするのに便利なので、マウスがないときでもプログラム がデバイスを開くことができます。これが私たちのために何を意味

は、我々のマウス入力イベント処理のために(私たちは、マウスを抜いたときにどれが消える)EVENT0を使用することができますが、我々はいくつかをすることなく、ホットプラグをサポートすることはできないということですカーネル/ Qtソースの修正、またはマウスの入手方法をQtマウス入力パラメータとして動作させることができます。

ので、「EVENT0仕事やないmouse0/マウスをする理由」の質問はまだ立っている...しかし、今の私たちは、私たちが一緒に暮らすことができるソリューションを持っています。

更新:少し遅れて、udevがシステムで正常に動作していないことがわかりました。 Yoctoを構築するために私たちは、パッケージ・グループにRDEPENDSにudevの追加、そして今、私たちは

QT_QPA_GENERIC_PLUGINS=evdevmouse 

を設定することができ、我々はホットプラグ対応での作業にマウスポインタを取得します。

0

私はこれがあなたの問題に適用される場合知らない(私はQTを使用いけない)が、machconfigファイル内

HAVE_TOUCHSCREEN=1変数があります。通常、BSP層のrecipes-bsp/formfactor/formfactorディレクトリにあります。 1に設定すると、カーソルが非表示になります。

だから0

関連する問題