我正在尝试创建一个 QSlider 的子类,它允许用户插入“书签”,这样他们就可以记住滑块上的重要位置。我在绘制滑块上的选项卡时遇到了问题 - 使用 QStyle.sliderPositionFromValue,我得到了一个值,但它有点不准确。如果我在滑块的左侧,则标签被画得太左,而在右侧它被画得太右。我相信这是因为 QSlider.width() 返回整个对象的宽度,包括左右的小偏移量。因此,当滑块本身的长度实际上是 615 时,width() 可能会返回 630 像素。
这是我用来获取像素位置并在滑块上画一条线的代码。
pos = QStyle.sliderPositionFromValue(self.minimum(),self.maximum(),sliderIndex,self.width())
painter.drawLine(pos,0,pos,self.height())
从第 2699 行开始,我一直在这里查看 QT Source ,看来我需要使用 QStyle 中的 PixelMetric 类。我试过使用:
self.style().pixelMetric(QStyle.PM_SliderSpaceAvailable)
但这会返回 0,这显然不是我需要的值。
我会很感激任何建议。
编辑:正如评论中所建议的,我将调用更改为:
self.style().pixelMetric(QStyle.PM_SliderSpaceAvailable, QStyleOption(1,QStyleOption.SO_Slider),self)
但是,这会返回 -14,它也与偏移量的值不匹配(我尝试使用 self.width()-14 但偏移量仍然存在。