- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 QSlider,我想在用户按下鼠标左键时移动到鼠标光标的位置。我一直在四处寻找,找不到任何新的东西来解决我的问题。
这是我的 slider 。我希望能够点击让 slider 跳转到鼠标点击的位置。我可以拖动 slider ,但我希望能够单击。我测试了点击 Dolphin 文件管理器中的 slider 。它递增而不是跳到鼠标的确切位置。
QSlider has very few of its own functions [...]
这表明没有内置方法可以做到这一点。有没有办法获取鼠标点击的位置并将 slider 移动到该点?
最佳答案
解决方案是计算位置并设置在mousePressEvent中,计算不像算术计算那么容易,因为它取决于每个操作系统的样式和样式表,所以我们必须使用QStyle,如下所示:
from PyQt5 import QtCore, QtWidgets
class Slider(QtWidgets.QSlider):
def mousePressEvent(self, event):
super(Slider, self).mousePressEvent(event)
if event.button() == QtCore.Qt.LeftButton:
val = self.pixelPosToRangeValue(event.pos())
self.setValue(val)
def pixelPosToRangeValue(self, pos):
opt = QtWidgets.QStyleOptionSlider()
self.initStyleOption(opt)
gr = self.style().subControlRect(QtWidgets.QStyle.CC_Slider, opt, QtWidgets.QStyle.SC_SliderGroove, self)
sr = self.style().subControlRect(QtWidgets.QStyle.CC_Slider, opt, QtWidgets.QStyle.SC_SliderHandle, self)
if self.orientation() == QtCore.Qt.Horizontal:
sliderLength = sr.width()
sliderMin = gr.x()
sliderMax = gr.right() - sliderLength + 1
else:
sliderLength = sr.height()
sliderMin = gr.y()
sliderMax = gr.bottom() - sliderLength + 1;
pr = pos - sr.center() + sr.topLeft()
p = pr.x() if self.orientation() == QtCore.Qt.Horizontal else pr.y()
return QtWidgets.QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), p - sliderMin,
sliderMax - sliderMin, opt.upsideDown)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
flay = QtWidgets.QFormLayout(w)
w1 = QtWidgets.QSlider(QtCore.Qt.Horizontal)
w2 = Slider(QtCore.Qt.Horizontal)
flay.addRow("default: ", w1)
flay.addRow("modified: ", w2)
w.show()
sys.exit(app.exec_())
关于python - 移动 QSlider 到鼠标点击位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52689047/
我正在尝试使用 QSlider,但是如果有人单击位置 X,他想将 slider 放置到该位置, slider 总是首先将值设置为最大值或最小值,然后设置为值 X。所以没有必要介入。 我怎样才能避免这一
我的问题是,我似乎无法让我的 QSlider 使用 double 值而不是整数,因为我需要让它返回 double 值到 QLineEdit,并在我将一些值放入 QLineEdit 时设置它自己的值。编
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
给定一组图像,我想移动一个QSlider,以便每一步都在其上方显示一个代表其中一个图像的小缩略图图标。有什么提示或建议吗? 最佳答案 您必须使用 QLabel 来显示图标,并使用 QSlider 的
我目前有一个 QSlider,它可以使用鼠标滚动图像数据帧。我希望能够使用箭头键滚动一步(一帧)。 这是我当前的 sliderMoved 代码: def sliderMoved(self,val):
我正在尝试在 slider 的 QSlider::add-page 部分制作一个具有绝对渐变和分块样式的 QSlider。 以下样式表代码: QSlider::groove:vertical {
我正在尝试制作一个媒体播放器。使用 QSlider 显示轨道的时间状态。当用户在 QSlider 的某处释放 slider 时,应该会进行轨道搜索。我查看了 QSlider 信号列表。似乎适合的是 s
我正在使用 QSlider (v4.6) 进行输入以及向用户提供反馈。对于反馈,我将调用 setValue 方法。我试图找到一个只有在用户修改值时才会触发的信号。 valueChanged 信号在用户
使用 Qt 5.2.1 是否可以将 QSlider(不管它是水平的还是垂直的)设置为只读,即用户不能更改 slider 的值而只能将其用作某种指示器?我无法在 Qt 文档或 Qt Designer 中
我想在 QSlider 上拦截 QPaintEvent 并绘制它。但我找不到有关事物几何形状的详细信息。我可以知道整个小部件的 rect() 但你怎么知道小部件矩形中第一个刻度线或最后一个刻度线的位置
我试图在 QSlider 增加或减少时触发一个不同的信号。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪 slider 的值,只能进行比较。 有办法吗? 最佳答案 如果我没理解错的话,您不
我试图在 QSlider 增加或减少时触发一个不同的信号。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪 slider 的值,只能进行比较。 有办法吗? 最佳答案 如果我没理解错的话,您不
我正在使用 Qt 5.3 并尝试设置 QSlider 的样式.但是,当我应用样式表时,刻度线消失了。有谁知道如何在不影响刻度线的情况下保持样式? 这是样式表: QSlider::groove:hori
我在python 3中使用qslider。我可以通过键盘事件的上、下、左、右箭头向前和向后移动光标。我想禁用其中的特定部分:向上和向下箭头移动光标,而左右光标则不移动。可以这样做吗? 最佳答案 您必须
我应该如何将 5 个 QtSlider 连接到一个插槽?,我需要知道其中哪一个发送了信号“valueChanged”,因此,我需要发送诸如“objectName”之类的任何内容。 我不知道有什么正确的
我使用样式表重新设计并实现了 QSlider。 不过,我找不到如何在 slider 本身之前和之后(左或右、上或下)放置图像。 例如: slider : ----00--------------- 左
我坚持尝试反转 QSlider 的范围,使 abs(maxVal) 始终保持在顶部。 slider->setRange[0,maxVal] 应该看起来像右边的 slider slider->setRa
我希望能够随时用键盘的箭头移动QSlider。 我希望能够单击 QWindow 上的任意位置并保持激活 QSlider 以使用箭头移动光标。 我的问题是只有在我们之前点击QSlider 时才允许使用箭
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Using QSlider to change the value of a variable 我正在尝试使
我是一名优秀的程序员,十分优秀!