2013-02-04 22 views
5

QWidget(Qt4またはQt5)/ QWindow(Qt5以降)を境界線なしに作成し、カスタムタイトルバーを描画し、マウスの位置をmouseMoveEventで追跡してウィンドウの位置を更新するだけで、画面上のウィンドウを移動できます。QWidget/QWindowタイトルバー:カスタム外観、ネイティブな感じ(Chromeに似ています)

しかし、この動きは、ウィンドウマネージャによって実装されたものとは異なる動作をします。たとえば、画面の境界付近でウィンドウを移動することは、「フルスクリーン」または「分割スクリーン」と解釈することができます。またはウィンドウは、システム/ウィンドウマネージャに応じて、お互いの境界線にスナップします。上記のようなウィンドウの動きを実装すると、これらのことは機能しません。

Google Chrome/Chromiumは、カスタムウィンドウのタイトルバーと枠線を実装するアプリケーションの1つの例であり、ウィンドウマネージャのネイティブ動作にも対応しています。私は、Chromeがこれらを単独で実装しているか(ウィンドウマネージャとその設定を検出しているのか)、あるいは「ネイティブウィンドウの開始」を伝えるために、ほとんどのウィンドウマネージャに機能があるかどうかはっきりしています"ネイティブウインドウの動きを止める"または同様のもの。

Qtで可能なことはありますか?そうでない場合は、おそらくQxtのような他のライブラリを使用していますか?

参考:私は主にWindowsとLinuxをターゲットにしていますが、ユーザーはのいずれかのウィンドウマネージャをインストールすることができます。

+0

@BЈовић(編集):Qt5固有のものではありません。タイトルは誤解を招いていた – leemes

+1

この問題は、(少なくともWindowsでは)あなたの問題に関連している可能性があります:http://stackoverflow.com/questions/11979278/wm-syscommand-sc-move-eats-up-mouse-events-and-mouse-up-ノンフィアド –

+0

@Roku Excellent、ありがとうございました。これはWindowsにとってうまくいくはずです。だからまだLinuxで動作する解決策を探しています。 – leemes

答えて

2

最近、Qt4と同じことを試してみると、プラットフォームごと/ウィンドウマネージャごとにチューニングする必要があると私は心配しています。私はQWindowへのパッチがこの領域での動作を改善することを期待していますが、私はOS /ウィンドウマネージャにあなたが達成しようとしていることを伝えるための標準フックを知らない。

同様に、Qtはこれを解決するには至っていないはずです。それは、一般的な方法であなたを助けるために何もできない領域です。

関連する問題