コード例 #1
0
ファイル: scrollbar.cpp プロジェクト: suma/hex
void ScrollBar::mouseMoveEvent(QMouseEvent *ev)
{
	if (mouse_grabed_) {
		// position diff
		int pos = (orientation_ == Qt::Horizontal ? ev->pos().x() : ev->pos().y()) - bar_grabed_position_;

		// fix negative
		pos = qMax(pos, 0);
		Q_ASSERT(pos >= 0);

		// fix maximum
		const qint64 value = qMin(sliderValueFromPosition(pos, drawBarSize()), maximum_);
		Q_ASSERT(value <= maximum_);

		if (isSliderDown()) {
			setSliderPosition(value);
		}

		if (hasTracking()) {
			setValue(value);
		}
	} else {
		// When mouse hovering
		if (isScrollBarArea(ev->pos())) {
			// TODO: animation
		}
	}
}
コード例 #2
0
ファイル: kscrollbar.cpp プロジェクト: kxtry/kxfw
/*!
  \reimp
 */
void KScrollBar::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    QStyle::SubControl control = hitTestComplexControl(event->pos().toPoint());
    m_pressedControl = control;
	if(control == QStyle::SC_ScrollBarAddPage  || control == QStyle::SC_ScrollBarSubPage)
	{
		int pos = m_orientation == Qt::Vertical ? event->pos().y() : event->pos().x();

		int sbextent = m_buttonHeight;
		int maxlen = ((m_orientation == Qt::Horizontal) ? width() : height()) - (sbextent * 2);
		int sliderlen = sliderPixels();
		m_tagetValue = sliderValueFromPosition(m_minimum, m_maximum, pos - sbextent, maxlen - sliderlen, false);
	}
    performSubControlAction(control);
    if ((control != QStyle::SC_ScrollBarSlider) &&
        !(m_initialDelayTimer.isActive() || m_repeatActionTimer.isActive()))
	{
		m_initialDelayTimer.start(m_initialDelay, this);
	}
	if(m_pressedControl == QStyle::SC_ScrollBarSlider)
	{
		m_thumb->setDown();
	}
}