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

时间:2014-03-18 23:12:44

标签: qt pyside qslider

我正在尝试创建一个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 here,看起来我需要使用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但偏移量仍然存在。

0 个答案:

没有答案