2012-04-06 9 views
5

私は半透明の情報ウィンドウを作成したいと思います。ウィンドウがクリックされていないかのように、ウィンドウ上のクリックはそのまま通過するはずです。QMainWindowは、クリックを無視して、それらを背景ウィンドウに渡します。

どのようにこのような動作を実装することをお勧めしますか?それを行う簡単な方法はありますか、不器用な回避策に従わなければなりませんか?私は、ウィンドウを隠し、クリックを再実行し、ウィンドウを再び表示させることを考えています。しかし、これはまだdrag'n'dropジェスチャーを台無しにするでしょう。

+0

これはこれまで実装できましたか?私は同じを実装しようとしている。 – Kolyunya

答えて

6

Qt::WidgetAttributeの列挙型の値を見てみましょう:Qt::WA_TransparentForMouseEvents

有効になって、この属性はウィジェットとその子を するマウスイベントの配信を無効にした場合。ウィジェットとその子が ウィジェット階層に存在しない場合と同様に、マウスイベントは他の ウィジェットに配信されます。マウスのクリックやその他のイベントは効果的に " "を渡します。この属性はデフォルトで無効になっています。

+0

[this](http://i.imgur.com/yGB2Q.png)のように?私は間違っている可能性がありますが、Windowsではうまくいかないようです。 – Pieter

+0

@Pieterあなたのクリックが、半透明の情報ウィンドウを同じアプリケーションまたは別のアプリケーションに属する別のウィンドウに渡すようにしますか? – Bill

+0

@Pieterここで重要なのは、Qt :: WA_TransparentForMouseEvents属性を持つ半透明の情報ウィンドウのクリックが、そのウィンドウが同じQtアプリケーションに属している場合にのみ、別のウィンドウで受信されることです。私はQtソースをチェックし、上記の属性は、アプリケーションのどのウィンドウがマウスイベントを受け取るかを内部的に判断する 'QWidget * QApplication :: widgetAt(const QPoint&point)[静的]'の動作に影響します。 – Bill

0

「マウスイベントの透過性」(正確な用語はわかりませんでした)についてもう少し研究しましたが、私はthisを見つけました。

私はあなたの問題に一般的で簡単なアプローチはないと思います。おそらくネイティブAPIを掘り下げなければならないでしょう。イベントがアプリケーションに到達すると、それ自体で他のアプリケーションに転送されることはありません。

あなたはどう思いますか?私は各OSのネイティブAPIを扱うことになりますか?

関連する問題