1

現在、リモート XServer (Exceed) で Qt X11 アプリケーションを実行しようとしています。アプリケーション ウィンドウを常に他のディスプレイの上に表示するために、次のステートメントを使用しています。

MainWindow->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Tool);

Windows 7 および Ubuntu オペレーティング システムでアプリケーションをローカルで実行すると、「Always on Top」アプリケーションとして実行されます。ただし、表示情報をリモート XServer (Exceed x64 v14) にルーティングすると、「Always on Top」プロパティなしで実行が開始されます。フォーカスを失うと、他のディスプレイの後ろに移動します。

Qt コードまたは Exceed 製品で行う必要があるその他の構成はありますか?

ありがとう。

4

2 に答える 2

2

X11 転送はこの機能をサポートしていません

于 2012-06-01T12:05:02.397 に答える
1

まず、いくつかの用語を整理しましょう。設定した「Always on Top」プロパティは X11 の機能ではなく、Inter-Client-Communication-Manual および Extended-Window-Manager の一部として指定された、いわゆるウィンドウ マネージャの「ヒント」の標準セットの一部です。 -ヒント。

X11 は、画面上のウィンドウの配置を処理しません。これは、ウィンドウ マネージャーが行うことです。典型的な X11 システムでは、ICCCM/EWMH に準拠したウィンドウ マネージャーを取得しました。これはすべてのウィンドウを制御しており、すべて問題ありません。X11 サーバーの場合、クライアントがどの方法で接続されているかは問題ではなく、クライアント間のすべての通信は X11 サーバーを介して行われるため、これはあらゆる種類の転送でも機能します。

あなたのケースでは、Microsoft Windows デスクトップ上で実行されている X11 サーバーである Exceed を使用しています。Windows はすべてのウィンドウ管理を自分で行います。「Always-On-Top」などは、Windows のウィンドウ管理コードの一部であるポリシーです。ただし、X11 はポリシーを定義せず、メソッドのみを使用するため、あらゆる種類の ICCCM/EWMH 情報がWindows ウィンドウ管理に渡されることはありません。すべての Windows が表示するのは、個々のクライアント用に Exceed によって作成された、機能のない最上位のウィンドウです。

Exceed 内で X11 WM を開始できますが、この WM は X11 内にのみ存在し、X11 はポリシーを定義していないため、"Always-On-Top" は Windows に、ウィンドウが実際に最前面にとどまる必要があることを伝える方法がありません。Exceed を「フルスクリーン」モードで起動することもできます。このモードでは、すべての X11 クライアントが独自の小さなデスクトップで実行されているウィンドウ全体が開きます。そこで実行されている WM は X11 クライアントのみを管理しますが、その情報を Windows に渡すことはできません。

実際に必要なのは、Exceed に並行して接続し、Windows ウィンドウのプロパティ (ポリシー) を X11 側の ICCCM/EWMH と同期させるある種のバイパスでした。このようなプログラムは完全に実行可能ですが、これを実行できるプログラムを私は知りません。

于 2012-06-05T10:50:24.513 に答える