我正在开发一个软件,其绘图表面代表一个绘图(如 sin 函数)(QWidget 的子项),我希望 QScrollBar 像 QScrollArea 一样工作。因此,如果我的绘图小部件显示 750 个点(我的绘图由点组成),但有 1000 个点,我希望 ScrollBar 的 slider 填充 75% 的可用空间。
我不能使用 QScrollArea,因为滚动与其包含的小部件的大小成正比。在我的例子中,滚动必须与屏幕上的点数成比例。我知道如何获得我的比率,但我不知道如何正确设置 QScrollBar
示例:我编辑了 PageStep 的值,但我不明白这是如何工作的。我可以将 pageStep 设置为 100,范围为 [0,99],它将填满 QScrollBar 的一半。
我的界面:
QWidget (Vertical Layout) //Main Widget
Drawing Surface (Child of QWidget)
QScrollBar (Horizontal)
最佳答案
好吧,我想我可以用这个做点什么:
http://harmattan-dev.nokia.com/docs/library/html/qt4/qscrollbar.html
The relationship between a document length, the range of values used in a scroll bar, and the page step is simple in many common situations. The scroll bar's range of values is determined by subtracting a chosen page step from some value representing the length of the document. In such cases, the following equation is useful: document length = maximum() - minimum() + pageStep().
所以在我的例子中,长度是点的数量,我可以将 minimum() 设置为 0。所以,正如您在图片上看到的,执行类似 QScrollArea 的操作。比例是:PercentageVisible = PageStep/Length 另一个方程是Length = PageStep + Max。
我有两个方程式,两个缺失值(PageStep 和 Maximum)和两个已知值(PercentageVisible 和 Length)。
示例:我有 1024 个点,但只显示了其中的 75%。
0.75 = PageStep/1024 ----------> PageStep = 768
1024 = 最大 + 768 --------------> 最大 = 256
您可以在您的软件中试用它,它会起作用。我知道没有那么多人需要重现这个,因为在大多数情况下 QScrollArea 会完成这项工作。
例如,此代码位于响应调整大小事件的插槽中:
ui.sbarRange->setPageStep(u64SampleCount * dRatio);
ui.sbarRange->setMaximum(u64SampleCount - ui.sbarRange->pageStep());
关于c++ - 设置QScrollBar的 slider 大小与内容对应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432534/