我正在继承QDoubleSpinBox以添加一些功能(比如根据光标在lineedit中的位置递增值)并更改我觉得烦人的一些功能。后者之一是发出中间值:例如如果你想输入值323它将发出3然后是32然后最终发出323.我想将它设置为仅在输入时发出(即实际上仅在输入时改变值)。
无论如何,我无法弄清楚如何捕获这些中间编辑。我重写了setValue,看看我是否能以某种方式阻止它,但它显然没有被调用(或者至少我的覆盖不是)。在编辑行编辑时,我不确定该值是如何实际设置的。
更一般地说,这个盒子的逻辑逃脱了我。是否有一些文档可以解释例如“如果你在lineedit中输入一个数字,那么就会调用这一系列例程......如果你点击向上箭头,那么这一系列例程会被调用?”
如果重要,我正在使用PyQt5
编辑:这是另一个案例,其中访问这一点很重要。假设我想为框实现撤消/重做结构。我能想到访问更改值的唯一方法是连接valueChanged信号。但是如果我把这个盒子子类化,那么听一个信号似乎有点费解,而不是仅仅在内部观察价值变化或者我在这里错过了什么?
答案 0 :(得分:1)
您可以使用以下信号:
void QAbstractSpinBox::editingFinished() [signal]
此信号发出编辑完成。当旋转框失去焦点并按下输入时会发生这种情况。
基于QAbstractSpinBox
的文档:
http://qt-project.org/doc/qt-5.1/qtwidgets/qabstractspinbox.html#editingFinished
没有任何东西可以结合基于箭头的更改和编辑完成的更改。
答案 1 :(得分:1)
我的用例是让用户输入值而不会在每个新数字上得到信号,同时仍使↑,↓, Page Up < / kbd>, Page Down 键和箭头按钮照常工作,每次激活都会发出信号。
QAbstractSpinBox::editingFinished
信号不提供此功能:仅在失去焦点或按下 Return / Enter 时才会发出。
我真正需要的是QAbstractSpinBox
的{{3}}属性。如果它是true
(默认值),则旋转框会在键入的每个数字上发出valueChanged
。如果将其设置为false
,则其行为与我在此答案开头所述的完全相同。