📄 q3scrollview.cpp
字号:
needv=true; if (d->vMode == Auto) showv=true; } if (showv && !d->inresize && w-hsbExt-lmarg-rmarg < d->contentsWidth()) { needh=true; if (d->hMode == Auto) showh=true; } } else { // Scrollbars not needed, only show scroll bar that are always on. needh = needv = false; showh = d->hMode == AlwaysOn; showv = d->vMode == AlwaysOn; } bool sc = d->signal_choke; d->signal_choke=true; // Hide unneeded scroll bar, calculate viewport size if (showh) { porth=h-hsbExt-tmarg-bmarg; } else { if (!needh) d->hbar->setValue(0); d->hbar->hide(); porth=h-tmarg-bmarg; } if (showv) { portw=w-vsbExt-lmarg-rmarg; } else { if (!needv) d->vbar->setValue(0); d->vbar->hide(); portw=w-lmarg-rmarg; } // Configure scroll bars that we will show if (needv) { d->vbar->setRange(0, contentsHeight()-porth); d->vbar->setSteps(Q3ScrollView::d->vbar->lineStep(), porth); } else { d->vbar->setRange(0, 0); } if (needh) { d->hbar->setRange(0, QMAX(0, d->contentsWidth()-portw)); d->hbar->setSteps(Q3ScrollView::d->hbar->lineStep(), portw); } else { d->hbar->setRange(0, 0); } // Position the scroll bars, viewport and corner widget. int bottom; bool reverse = QApplication::reverseLayout(); int xoffset = (reverse && (showv || cornerWidget())) ? vsbExt : 0; int xpos = reverse ? 0 : w - vsbExt; bool frameContentsOnly = style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents); if(! frameContentsOnly) { if (reverse) xpos += fw; else xpos -= fw; } if (showh) { int right = (showc || showv || cornerWidget()) ? w-vsbExt : w; if (! frameContentsOnly) setHBarGeometry(*d->hbar, fw + xoffset, h-hsbExt-fw, right-fw-fw, hsbExt); else setHBarGeometry(*d->hbar, 0 + xoffset, h-hsbExt, right, hsbExt); bottom=h-hsbExt; } else { bottom=h; } if (showv) { clipper()->setGeometry(lmarg + xoffset, tmarg, w-vsbExt-lmarg-rmarg, bottom-tmarg-bmarg); d->viewportResized(w-vsbExt-lmarg-rmarg, bottom-tmarg-bmarg); if (! frameContentsOnly) changeFrameRect(QRect(0, 0, w, h)); else changeFrameRect(QRect(xoffset, 0, w-vsbExt, bottom)); if (showc || cornerWidget()) { if (! frameContentsOnly) setVBarGeometry(*d->vbar, xpos, fw, vsbExt, h-hsbExt-fw-fw); else setVBarGeometry(*d->vbar, xpos, 0, vsbExt, h-hsbExt); } else { if (! frameContentsOnly) setVBarGeometry(*d->vbar, xpos, fw, vsbExt, bottom-fw-fw); else setVBarGeometry(*d->vbar, xpos, 0, vsbExt, bottom); } } else { if (! frameContentsOnly) changeFrameRect(QRect(0, 0, w, h)); else changeFrameRect(QRect(0, 0, w, bottom)); clipper()->setGeometry(lmarg, tmarg, w-lmarg-rmarg, bottom-tmarg-bmarg); d->viewportResized(w-lmarg-rmarg, bottom-tmarg-bmarg); } QWidget *corner = d->corner; if (d->corner) { if (! frameContentsOnly) corner->setGeometry(xpos, h-hsbExt-fw, vsbExt, hsbExt); else corner->setGeometry(xpos, h-hsbExt, vsbExt, hsbExt); } d->signal_choke=sc; if (d->contentsX()+visibleWidth() > d->contentsWidth()) { int x;#if 0 if (reverse) x =QMIN(0,d->contentsWidth()-visibleWidth()); else#endif x =QMAX(0,d->contentsWidth()-visibleWidth()); d->hbar->setValue(x); // Do it even if it is recursive moveContents(-x, -d->contentsY()); } if (d->contentsY()+visibleHeight() > contentsHeight()) { int y=QMAX(0,contentsHeight()-visibleHeight()); d->vbar->setValue(y); // Do it even if it is recursive moveContents(-d->contentsX(), -y); } // Finally, show the scroll bars if (showh && (d->hbar->isHidden() || !d->hbar->isVisible())) d->hbar->show(); if (showv && (d->vbar->isHidden() || !d->vbar->isVisible())) d->vbar->show(); d->signal_choke=true; d->vbar->setValue(d->contentsY()); d->hbar->setValue(d->contentsX()); d->signal_choke=false; QSize newVisibleSize(visibleWidth(), visibleHeight()); if (d->clipped_viewport && oldVisibleSize != newVisibleSize) { QResizeEvent e(newVisibleSize, oldVisibleSize); viewportResizeEvent(&e); }}/*! \reimp*/void Q3ScrollView::setVisible(bool visible){ if (visible && !isVisible()) { QWidget::setVisible(visible); updateScrollBars(); d->hideOrShowAll(this); } else { QWidget::setVisible(visible); }}/*! \internal */void Q3ScrollView::resize(int w, int h){ QWidget::resize(w, h);}/*! \internal*/void Q3ScrollView::resize(const QSize& s){ resize(s.width(), s.height());}/*! \reimp*/void Q3ScrollView::resizeEvent(QResizeEvent* event){ Q3Frame::resizeEvent(event);#if 0 if (QApplication::reverseLayout()) { d->fake_scroll = true; scrollBy(-event->size().width() + event->oldSize().width(), 0); d->fake_scroll = false; }#endif bool inresize = d->inresize; d->inresize = true; updateScrollBars(); d->inresize = inresize; d->scrollbar_timer.start(0, true); d->hideOrShowAll(this);}/*! \reimp*/void Q3ScrollView::mousePressEvent(QMouseEvent * e){ e->ignore();}/*! \reimp*/void Q3ScrollView::mouseReleaseEvent(QMouseEvent *e){ e->ignore();}/*! \reimp*/void Q3ScrollView::mouseDoubleClickEvent(QMouseEvent *e){ e->ignore();}/*! \reimp*/void Q3ScrollView::mouseMoveEvent(QMouseEvent *e){ e->ignore();}/*! \reimp*/#ifndef QT_NO_WHEELEVENTvoid Q3ScrollView::wheelEvent(QWheelEvent *e){ QWheelEvent ce(viewport()->mapFromGlobal(e->globalPos()), e->globalPos(), e->delta(), e->state()); viewportWheelEvent(&ce); if (!ce.isAccepted()) { if (e->orientation() == Horizontal && horizontalScrollBar()) horizontalScrollBar()->event(e); else if (e->orientation() == Vertical && verticalScrollBar()) verticalScrollBar()->event(e); } else { e->accept(); }}#endif/*! \reimp*/void Q3ScrollView::contextMenuEvent(QContextMenuEvent *e){ if (e->reason() != QContextMenuEvent::Keyboard) { e->ignore(); return; } QContextMenuEvent ce(e->reason(), viewport()->mapFromGlobal(e->globalPos()), e->globalPos(), e->state()); viewportContextMenuEvent(&ce); if (ce.isAccepted()) e->accept(); else e->ignore();}Q3ScrollView::ScrollBarMode Q3ScrollView::vScrollBarMode() const{ return d->vMode;}/*! \enum Q3ScrollView::ScrollBarMode This enum type describes the various modes of Q3ScrollView's scroll bars. \value Auto Q3ScrollView shows a scroll bar when the content is too large to fit and not otherwise. This is the default. \value AlwaysOff Q3ScrollView never shows a scroll bar. \value AlwaysOn Q3ScrollView always shows a scroll bar. (The modes for the horizontal and vertical scroll bars are independent.)*//*! \property Q3ScrollView::vScrollBarMode \brief the mode for the vertical scroll bar The default mode is Q3ScrollView::Auto. \sa hScrollBarMode*/void Q3ScrollView::setVScrollBarMode(ScrollBarMode mode){ if (d->vMode != mode) { d->vMode = mode; updateScrollBars(); }}/*! \property Q3ScrollView::hScrollBarMode \brief the mode for the horizontal scroll bar The default mode is Q3ScrollView::Auto. \sa vScrollBarMode*/Q3ScrollView::ScrollBarMode Q3ScrollView::hScrollBarMode() const{ return d->hMode;}void Q3ScrollView::setHScrollBarMode(ScrollBarMode mode){ if (d->hMode != mode) { d->hMode = mode; updateScrollBars(); }}/*! Returns the widget in the corner between the two scroll bars. By default, no corner widget is present.*/QWidget* Q3ScrollView::cornerWidget() const{ return d->corner;}/*! Sets the widget in the \a corner between the two scroll bars. You will probably also want to set at least one of the scroll bar modes to \c AlwaysOn. Passing 0 shows no widget in the corner. Any previous \a corner widget is hidden. You may call setCornerWidget() with the same widget at different times. All widgets set here will be deleted by the Q3ScrollView when it is destroyed unless you separately reparent the widget after setting some other corner widget (or 0). Any \e newly set widget should have no current parent. By default, no corner widget is present. \sa setVScrollBarMode(), setHScrollBarMode()*/void Q3ScrollView::setCornerWidget(QWidget* corner){ QWidget* oldcorner = d->corner; if (oldcorner != corner) { if (oldcorner) oldcorner->hide(); d->corner = corner; corner->setParent(this); updateScrollBars(); if (corner) corner->show(); }}void Q3ScrollView::setResizePolicy(ResizePolicy r){ d->policy = r;}/*! \property Q3ScrollView::resizePolicy \brief the resize policy The default is \c Default. \sa ResizePolicy*/Q3ScrollView::ResizePolicy Q3ScrollView::resizePolicy() const{ return d->policy;}/*! \internal*/void Q3ScrollView::setEnabled(bool enable){ Q3Frame::setEnabled(enable);}/*! Removes the \a child widget from the scrolled area. Note that this happens automatically if the \a child is deleted.*/void Q3ScrollView::removeChild(QWidget* child){ if (!d || !child) // First check in case we are destructing return; QSVChildRec *r = d->rec(child); if (r) d->deleteChildRec(r);}/*! \internal*/void Q3ScrollView::removeChild(QObject* child){ Q3Frame::removeChild(child);}/*! Inserts the widget, \a child, into the scrolled area positioned at (\a x, \a y). The position defaults to (0, 0). If the child is already in the view, it is just moved.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -