次の Web ページ: http://web.mit.edu/qt-dynamic/www/tutorials-tutorial-t3.html
次の文が挙げられます。
A widget is clipped by its parent and by the widgets in front of it.
そのような文はどういう意味ですか?
ありがとう。
次の Web ページ: http://web.mit.edu/qt-dynamic/www/tutorials-tutorial-t3.html
次の文が挙げられます。
A widget is clipped by its parent and by the widgets in front of it.
そのような文はどういう意味ですか?
ありがとう。
Qt には、親子ウィジェットの概念があります。親ウィジェットは、メイン ウィンドウ ウィジェットに至るまで、子ウィジェットのコンテナーです。したがって、これは、ウィジェットがその親 (コンテナー) ウィジェットによってクリップされることを示しているだけです。これは、親の境界を超えては拡張されないことを意味しますが、超えた場合は切断されます。同様に、ウィジェットはその前にあるウィジェットによってクリップされます。
まず、文の 2 番目の部分は、Qt >= 4.1 では、親が子の背後にペイントする可能性があるため、当てはまりません。
グラフィックでは、クリッピングは特定の領域への絵画の制限を表します。たとえば、 から(0,0)
への線(100,100)
を のクリッピング四角形で描いた場合、実質的に からへ(50x50)@(0,0)
の線のみを描画します。ペイントされたが、クリッピング領域の外側にあるすべてのピクセルは破棄されました。(0,0)
(50,50)
Qt では、必要に応じてメソッドを使用してペイントをクリップできますQPainter
が、ペイントは操作中の によって常に暗黙的にクリップされQPaintDevice
ます。QWidget
は でありQPaintDevice
、その外側をペイントしQWidget::rect()
ても効果はありません (= にクリップされますrect()
)。
さて、文の 2 番目の部分について: 古い Qt バージョンでは、子ウィジェットは最初にその領域を背景色/画像で塗りつぶしていたため、親のペイントがすべての子のジオメトリの結合の外側に効果的にクリップされていました。QWidget::autoFillBackground
Qt 4.1 以降、プロパティを に設定することでこの動作を無効にすることができますfalse
。実際、これはたまたま新しいデフォルトでもあります。
このautoFillBackground == false
場合、子ウィジェットは、実際にペイントする場所を除いて、背景として機能する親の描画を消去しなくなりました。QLabel
を例にとるとautoFillBackground == false
、 ではテキストを描画するだけで、親の描画がラベルの背景として透けて見えます。