2

我将 QDoubleSpinBox 子类化以添加一些功能(例如根据 lineedit 中光标的位置增加值)并更改一些我觉得烦人的功能。后者之一是发出中间值:例如,如果您想输入值 323,它将发出 3,然后是 32,最后是 323。我想将其设置为仅在输入时发出(即仅在输入时实际更改值)。

无论如何,我不知道如何捕捉这些中间编辑。我覆盖了 setValue 以查看是否可以以某种方式将其停止,但显然没有调用它(或者至少没有调用我的覆盖)。我不确定在行编辑中编辑时该值是如何设置的。

更一般地说,这个盒子的逻辑让我无法理解。是否有一些文档解释了例如“如果您在 lineedit 中键入一个数字,则调用这一系列例程......而如果您点击向上箭头,则调用这一系列例程?”

万一这很重要,我正在使用 PyQt5

编辑:这是另一种情况,其中访问它很重要。假设我想为盒子实现一个撤消/重做结构。我能想到的访问更改值的唯一方法是连接到 valueChanged 信号。但是,如果我对盒子进行子类化,那么收听信号而不是仅仅观察“内部”的值变化似乎有点令人费解,或者我在这里遗漏了什么?

4

2 回答 2

2

您可以使用以下信号:

void QAbstractSpinBox::editingFinished() [signal]

发出此信号,编辑完成。当旋转框失去焦点并且按下回车键时,就会发生这种情况。

基于以下文档QAbstractSpinBox

http://qt-project.org/doc/qt-5.1/qtwidgets/qabstractspinbox.html#editingFinished

没有任何东西可以结合基于箭头的更改和 editorFinished 更改。

于 2013-10-05T01:51:58.820 回答
2

我的用例是让用户输入值而不在每个新数字上获得信号,同时仍然使↑</kbd>, ↓</kbd>, Page Up, Page Down keys and arrow buttons work as usual, emitting the signal on each activation.

QAbstractSpinBox::editingFinished信号不提供此功能:它仅在焦点丢失或Return/Enter被按下时发出。

完全按照我的需要工作的keyboardTrackingQAbstractSpinBox. 如果是true(默认值),则旋转框会在输入的每个数字上发出valueChanged。如果您将其设置为false,它的行为与我在此答案开头所描述的完全一样。

于 2020-05-22T15:07:58.723 回答