通过QScrollArea的scrollContentsBy(int,int)重载函数,可以获取到一些与滚动有关的信息,但是不能直接通过这个函数对窗口内容进行滚动。
一个可行的做法如下:
void Widget::Scroll(int dx, int dy)
{
QScrollBar *pScrollBar = m_pView->view()->verticalScrollBar();
if(pScrollBar != NULL)
pScrollBar->setValue(pScrollBar->value() + dy);
pScrollBar = m_pView->view()->horizontalScrollBar();
if(pScrollBar != NULL)
pScrollBar->setValue(pScrollBar->value() + dx);
}
void Widget::ScrollTo(int x, int y)
{
QScrollBar *pScrollBar = m_pView->view()->verticalScrollBar();
if(pScrollBar != NULL)
{
if(y < pScrollBar->minimum()) y = pScrollBar->minimum();
if(y > pScrollBar->maximum()) y = pScrollBar->maximum();
pScrollBar->setValue(y);
}
pScrollBar = m_pView->view()->horizontalScrollBar();
if(pScrollBar != NULL)
{
if(x < pScrollBar->minimum()) x = pScrollBar->minimum();
if(x > pScrollBar->maximum()) x = pScrollBar->maximum();
pScrollBar->setValue(x);
}
}
注:上述代码中,m_pView->view()返回的是一个QGraphicsView指针对象,也就是QScrollArea的一个继承类,在滚动这方面与QScrollArea应该是一致的。
即,通过设置QScrollBar的数值来达到滚动的目的。