2

C ++を使用して、QtインターフェイスプログラムでQDoubleSpinBoxを非表示にしようとしています。

関数hide()を見つけましたが、要素を非表示にすると、それが占めていたスペースが考慮されないため、期待どおりに機能しません。そのため、すべてのウィンドウがおかしくなります。普通のように、スペースを隠して占有しておく機能があるのではないかと思っていました。他のフレームワークやJavaScriptでも一般的であるため、このような関数になるのではないかと思いました。

ない場合...解決策はありますか?

4

3 に答える 3

3

これはレイアウトによるものです。要素を追加/削除または表示/非表示にすると、レイアウトは自動的に再計算されます。レイアウトを使用しないことを選択できます。

于 2013-03-01T16:11:24.220 に答える
2

QDoubleSpinBoxを非表示にする代わりに、不透明度を0.0に設定してみることもできます。

mySpinBox.setWindowOpacity(0.0);

実際、私はそれがうまくいくとは思いません。

私が考えることができる最も簡単なことは、QDoubleSpinBoxをサブクラス化してから、ペイント関数(およびおそらくマウス処理)をオーバーライドして、独自の変数でオンとオフを切り替えることです。

于 2013-03-01T16:16:53.390 に答える
0

かなり迅速ですがエレガントではない解決策は、目的のウィジェットをサブクラス化し、追加のブール値を追加して、ジオメトリとそれを切り替えるメソッドを削除せずにウィジェットを非表示にすることです。オーバーロードされたペイントイベントで、ブール値がtrueの場合は、基本クラスの元のペイントイベント。それ以外の場合は何も描画しません。これにより、イベントを引き続き受け入れる完全に透過的なウィジェットが作成されます。そのためsetEnabled()、boolとともに使用して、非表示のときに無効にすることもできます。

多くのオブジェクトを非表示にしたり表示したりする場合はあまり適用できませんが、1つまたは2つの場合は機能し、実装が非常に高速です。

于 2013-03-02T08:58:27.513 に答える