def _test_visibility(self, view: StickyGraphicsView) -> None: header = view.headerView() footer = view.footerView() vsbar = view.verticalScrollBar() vsbar.triggerAction(vsbar.SliderToMinimum) self._ensure_laid_out(view) self.assertFalse(header.isVisibleTo(view)) self.assertTrue(footer.isVisibleTo(view)) vsbar.triggerAction(vsbar.SliderSingleStepAdd) self._ensure_laid_out(view) self.assertTrue(header.isVisibleTo(view)) self.assertTrue(footer.isVisibleTo(view)) vsbar.triggerAction(vsbar.SliderToMaximum) self._ensure_laid_out(view) self.assertTrue(header.isVisibleTo(view)) self.assertFalse(footer.isVisibleTo(view)) vsbar.triggerAction(vsbar.SliderSingleStepSub) self._ensure_laid_out(view) if not view.style().styleHint(QStyle.SH_ScrollBar_Transient, None, vsbar): # cannot reliably test due to QTBUG-65074 self.assertTrue(header.isVisibleTo(view)) self.assertTrue(footer.isVisibleTo(view))
def test(self): view = StickyGraphicsView() scene = QGraphicsScene(view) scene.setBackgroundBrush(QBrush(Qt.lightGray, Qt.CrossPattern)) view.setScene(scene) scene.addRect(QRectF(0, 0, 300, 20), Qt.red, QBrush(Qt.red, Qt.BDiagPattern)) scene.addRect(QRectF(0, 25, 300, 100)) scene.addRect(QRectF(0, 130, 300, 20), Qt.darkGray, QBrush(Qt.darkGray, Qt.BDiagPattern)) view.setHeaderSceneRect(QRectF(0, 0, 300, 20)) view.setFooterSceneRect(QRectF(0, 130, 300, 20)) header = view.headerView() footer = view.footerView() view.resize(310, 310) view.grab() self.assertFalse(header.isVisibleTo(view)) self.assertFalse(footer.isVisibleTo(view)) view.resize(310, 100) view.verticalScrollBar().setValue(0) # scroll to top view.grab() self.assertFalse(header.isVisibleTo(view)) self.assertTrue(footer.isVisibleTo(view)) view.verticalScrollBar().setValue( view.verticalScrollBar().maximum()) # scroll to bottom view.grab() self.assertTrue(header.isVisibleTo(view)) self.assertFalse(footer.isVisibleTo(view)) qWheelScroll(header.viewport(), angleDelta=QPoint(0, -720 * 8))