1

accept()ダイアログのスロットが呼び出されたときに QDialog を強制的に開いたままにするにはどうすればよいですか? ダイアログを非表示にせずにダイアログの exec を返すようにその関数を再実装することを考えていましたが、これを達成するためのより良い方法があるかどうか疑問に思っていました。

4

2 に答える 2

2

QDialog を使用するのではなく、QDockWidget を使用して効果を達成します。

  • ドックの移動を可能にする機能を削除 (QDockWidget::DockWidgetMovable)
  • ドックウィジェットをフローティングに設定 (setFloating(true))
  • ドック ウィジェットのアイテムをメイン ウィンドウの適切なシグナルとスロットに接続します。

参考文献

于 2011-08-20T17:55:48.600 に答える
2

ウィンドウを閉じるため、の代わりに を呼び出し、 の代わりにカスタム シグナルを使用して、QDialogモードレスにする必要があります。そして、呼び出し後に持っていたコードを使用して、その信号をメイン ウィンドウのスロットに接続します。showexecacceptacceptexec

また、まだそうでない場合は、QDialog への参照/ポインターをどこかに (メイン ウィンドウ クラスのメンバーとして、またはそれを開く関数内の静的変数として) 保持して、複数の作成を回避できるようにする必要があります。ダイアログのインスタンス、およびシグナル/スロットを一度だけ接続することを確認する必要があります。

于 2011-08-22T10:21:34.560 に答える