我对Qt / PySide很陌生,并尝试找出一种方法将QLabel
覆盖到QSlider
而不会丢失鼠标事件的交互性。目前正在使用QStackedLayout
我无法使用顶部的标签正确触发它们,并且它在下面时甚至不起作用(滑块不插值,从最小值跳到最大值)。
from PySide import QtCore, QtGui
class CustomSlider(QtGui.QWidget):
def __init__(self, minVal=0.0, maxVal=1.0, default=0.0):
super(CustomSlider, self).__init__()
self.slider = QtGui.QSlider()
self.slider.setRange(0.0, 1.0)
self.slider.setOrientation(QtCore.Qt.Horizontal)
self.slider.setStyleSheet("""
QSlider::groove:horizontal {
background: black;
height: 40px;
}
QSlider::sub-page:horizontal {
background: grey;
height: 40px;
}
QSlider::add-page:horizontal {
background: black;
height: 40px;
}""")
self.overlay = QtGui.QLabel()
self.overlay.setText("LABEL")
self.overlay.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
self.overlay.setStyleSheet("""QLabel{font: bold 18px;}""")
self.layout = QtGui.QStackedLayout()
self.layout.setStackingMode(QtGui.QStackedLayout.StackAll)
self.layout.addWidget(self.slider)
self.layout.addWidget(self.overlay)
self.setLayout(self.layout)
任何建议都非常受欢迎。
此致
答案 0 :(得分:0)
滑块从0跳到1,因为它只接受整数值。例如,如果您将最大值设置为100,那么您将发现它可以正常工作。
对于堆叠,您始终可以通过以下方式传递事件:
class CustomSlider(QtGui.QWidget):
def __init__(self, minVal=0.0, maxVal=1.0, default=0.0):
super(CustomSlider, self).__init__()
self.slider = QtGui.QSlider()
self.slider.setRange(0.0, 100.0) # <--
self.slider.setOrientation(QtCore.Qt.Horizontal)
self.slider.setStyleSheet("""
QSlider::groove:horizontal {
background: black;
height: 40px;
}
QSlider::sub-page:horizontal {
background: grey;
height: 40px;
}
QSlider::add-page:horizontal {
background: black;
height: 40px;
}""")
self.overlay = QtGui.QLabel()
self.overlay.setText("LABEL")
self.overlay.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
self.overlay.setStyleSheet("""QLabel{font: bold 18px;color:red;}""")
self.overlay.mousePressEvent = self.slider.mousePressEvent # <--
self.overlay.mouseReleaseEvent = self.slider.mouseReleaseEvent # <--
self.layout = QtGui.QStackedLayout()
self.layout.setStackingMode(QtGui.QStackedLayout.StackAll)
self.layout.addWidget(self.slider)
self.layout.addWidget(self.overlay)
self.setLayout(self.layout)