Qt 如何获取QSlider中左/右偏移的长度?

Qt 如何获取QSlider中左/右偏移的长度?,qt,pyside,qslider,Qt,Pyside,Qslider,我正在尝试创建QSlider的一个子类,允许用户插入“书签”,这样他们就可以记住滑块上的重要位置。我在绘制滑块上的选项卡时遇到问题-使用QStyle.sliderPositionFromValue,我得到了一个值,但它有点不准确。如果我在滑块的左侧,则选项卡的绘制过于左侧,而在右侧,它的绘制过于右侧。我认为这是因为QSlider.width()返回整个对象的宽度,包括左右两侧的小偏移。所以width()可能返回630像素,而滑块本身的长度实际上是615 这是我用来获取像素位置并在滑块上画一条线的

我正在尝试创建QSlider的一个子类,允许用户插入“书签”,这样他们就可以记住滑块上的重要位置。我在绘制滑块上的选项卡时遇到问题-使用QStyle.sliderPositionFromValue,我得到了一个值,但它有点不准确。如果我在滑块的左侧,则选项卡的绘制过于左侧,而在右侧,它的绘制过于右侧。我认为这是因为QSlider.width()返回整个对象的宽度,包括左右两侧的小偏移。所以width()可能返回630像素,而滑块本身的长度实际上是615

这是我用来获取像素位置并在滑块上画一条线的代码

pos = QStyle.sliderPositionFromValue(self.minimum(),self.maximum(),sliderIndex,self.width())
painter.drawLine(pos,0,pos,self.height())
我一直在看第2699行开始的QT源代码,似乎我需要使用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但是偏移量仍然存在。

我认为您需要传递
self
作为
pixelMetric
的第三个参数,以及
选项的
QStyleOptionSlider
参数。否则,
pixelMetric
返回0。我将调用更改为
self.style().pixelMetric>(QStyle.PM\u SliderSpaceAvailable,QStyleOption(1,QStyleOption.SO\u Slider),self)
现在返回-14,这对我来说没有意义。谢谢你的回复。