我正在研究一个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)函数不能像我期望的那样工作:
//启动程序后立即打印值
HorizontalScroll :: setValue = 0
值= 0
pageStep = 7320
//使用zoomer后打印的值为
HorizontalScroll :: 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)
答案 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();