qscrollbar(不是qscrollarea)setValue不起作用

时间:2014-02-06 10:34:30

标签: qt scrollbar qwt setvalue

我正在研究一个qwtPlot并且已经实现了自定义滚动条来说明放大时图中事物的位置(关于整个事物 - 基本上是百分比)。

现在,一切正常,除了当我在开始时进行任何缩放或平移时(或者只是当我看到整个情节然后我想放大时)。

这是我用来刷新滚动条外观的插槽:

void ScrollHorizontal::refreshAfterChanges() {
setValue(myPlot->getLowerBound(QwtPlot::xBottom));
setPageStep(myPlot->get_X_delta());
setSingleStep(myPlot->get_X_delta()/10);
setMaximum(myPlot->dataFromSources->lastTimeValMicro()-pageStep());  
update();
printV("HorizontalScroll::setValue",myPlot->getLowerBound(QwtPlot::xBottom));
printV("value", value());
printV("pageStep", pageStep());

在构造函数中我将最大值设置为0(以防万一,但它不会改变任何东西)

最后3行打印出一些对调试有用的值。我感谢他们发现的是插槽是正确执行的,但是setValue(int)函数不能像我期望的那样工作:

//启动程序后立即打印值
Horizo​​ntalScroll :: setValue = 0
值= 0
pageStep = 7320

//使用zoomer后打印的值为
Horizo​​ntalScroll :: setValue方法= 956.316
值= 0
pageStep = 2225

然后,当我稍微移动一下情节时,例如将它缩放1.1次,setValue正常工作,value()返回我设置的相同内容。但如果我进入100%观点(起点),我又会遇到同样的问题。

为了说明一下,这里有一些截图:
http://tinypic.com/view.php?pic=2znph7s&s=8#.UvNkDoZhauY
(放大前100%观看)

http://tinypic.com/view.php?pic=ke7nn9&s=8#.UvNkYIZhauY
(严重设置qscrollbar)

1 个答案:

答案 0 :(得分:1)

好的 - 问题是由行

引起的
setMaximum(myPlot->dataFromSources->lastTimeValMicro()-pageStep());  

有时将最大值设置为0。为什么?我希望滑块占据滚动条的整个长度,以便在绘图以100%视图显示时,您无法滚动它,我可以通过将pagestep设置为我的绘图的最大值来实现这一点。最大为0。

但是这导致setValue(int)问题 - 您无法设置大于最大值的值。

所以最终对我有用的是:

double valueToSet=myPlot->getLowerBound(QwtPlot::xBottom);
if(valueToSet>maximum())
    setMaximum(valueToSet);

setValue(myPlot->getLowerBound(QwtPlot::xBottom));
setPageStep(myPlot->get_X_delta());
setSingleStep(myPlot->get_X_delta()/10);
setMaximum(myPlot->dataFromSources->lastTimeValMicro()-pageStep());
update();