2016-10-21 7 views
0

私はQMainWindowを持っており、それからdialog-> show(); ダイアログ内 "Button1"と "Button2"と言うボタンがあります。Qtは、実行時のダイアログのモダリティを非表示にすることなく、最初に表示しないようにする

ここで、ダイアログのモダリティが「Qt :: ApplicationModal」に変更され、ユーザーが「Button2」を押すと、ダイアログのモダリティが「Qt :: NonModal」に変更されるはずです。

「setWindowModality(Qt :: ApplicationModal);」を使用してこれを行うことができます。 「Button1」の内側をクリックしてから「hide(); and show();」をクリックすると、と "setWindowModality(Qt :: NonModal);" "Button2"の内側をクリックし、続いて "hide(); and show();"

しかし、私が上記の方法をQDialogよりも使用すると、 "hide()とshow()"関数を使用しているので明白な点滅の影響があります。この瞬きは私が欲しくない影響を与えます。

そうで、親切にお勧め:

  1. モダリティを変更した後、 "隠す()" と "ショーを()" を使用しないでshow(によって開かQDialog)の様式を変更する方法は?
  2. 実行時にQDiloagのモダリティを変更する方法が他にない場合は、「hide」と「show」を選択します。QDialogの影響を減らすことは可能ですか?

私はQDialogにトグル効果を持たせたくありません。お勧めします。

おかげで、

+1

私はUXデザイナーを乗せています。 IMHOは、GUIとの全体的なやりとりを二重チェックする必要があるという兆候です。 – peppe

答えて

2

私はQDialogを使用しますが、実行時に様式を変更するために必要なことがありません。 QtのドキュメントはQt :: WindowModalityについて非常に明確で絶対的です。

このプロパティはウィンドウにのみ意味があります。モーダルウィジェットは、他のウィンドウの ウィジェットが入力されるのを防ぎます。この プロパティの値は、ウィジェットが であるときにブロックされるウィンドウを制御します。ウィンドウが表示されている間にこのプロパティを変更すると、 効果はありません。最初にウィジェットを非表示()してから再度表示()しなければなりません。

したがって、実行時にモダリティを変更するには、シーケンス命令hide()およびshow()が必要です。トリックは、モダリティ以外の元のプロパティと同じプロパティを持つ別の並列QDialogを作成し、それを既存のものとオーバーラップさせることです。これはあまり「線形」ではありませんが、時にはオブジェクトを「倍」するために使用されるソリューションです。この場合、現在使用しているQDialogを覚えておく必要があります。

関連する問題