c++ - 设置QScrollBar的 slider 大小与内容对应

标签 c++ qt scrollbar

我正在开发一个软件,其绘图表面代表一个绘图(如 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

enter image description here

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/

相关文章:

c++ - 从右到左隔离字符串。 C++

c++ - 如何使用 XOR 加密字符串而不包含奇怪的字符?

c++ - 在多线程中使用 stxxl

c++ - 如何在 C++ 中初始化嵌套结构?

c++ - Qt 5 中的最新 QT/QML 映射

c++ - QThread 和 QTimer

c++ - 程序选项

extjs - 面板内的面板 : autoScroll not working

html - 同一 <div> 的 x 轴和 y 轴滚动条的不同样式

html - Flexbox - 滚动条移动居中内容