QSpinBox失去焦点是不要触发editingFinished
时间: 2024-01-21 12:17:15 浏览: 328
是的,QSpinBox失去焦点时默认不会触发editingFinished信号。如果需要在失去焦点时触发editingFinished信号,可以通过调用QSpinBox的setKeyboardTracking函数将其设置为True。这样,QSpinBox将在失去焦点时触发editingFinished信号。例如,以下代码将QSpinBox的键盘跟踪设置为True:
```
spinBox.setKeyboardTracking(True)
```
相关问题
QSpinBox失去焦点时不要触发editingFinished
可以通过重载 QSpinBox 的 focusOutEvent 方法来实现失去焦点时不触发 editingFinished 信号的功能。具体实现如下:
```python
from PyQt5.QtWidgets import QSpinBox, QAbstractSpinBox, QApplication
from PyQt5.QtCore import Qt
class CustomSpinBox(QSpinBox):
def __init__(self, parent=None):
super().__init__(parent)
def focusOutEvent(self, event):
if self.lineEdit().hasSelectedText():
# 如果当前 spinbox 中有文本被选中,则不处理焦点事件
event.ignore()
else:
# 否则,调用父类的方法处理焦点事件,这里不会触发 editingFinished 信号
super().focusOutEvent(event)
if __name__ == '__main__':
app = QApplication([])
spinBox = CustomSpinBox()
spinBox.setRange(0, 100)
spinBox.setSingleStep(1)
spinBox.setAlignment(Qt.AlignCenter)
spinBox.setButtonSymbols(QAbstractSpinBox.NoButtons)
spinBox.setFixedWidth(50)
spinBox.show()
app.exec_()
```
在上述代码中,重载了 QSpinBox 的 focusOutEvent 方法,如果当前 spinbox 中有文本被选中,则不处理焦点事件,否则调用父类的方法处理焦点事件。这样,当 spinbox 失去焦点时不会触发 editingFinished 信号。
QSpinBox移动鼠标也会触发editingFinished
是的,QSpinBox在鼠标移动时也会触发editingFinished信号。这是因为QSpinBox默认情况下使用了QAbstractSpinBox的editingFinished信号,并且该信号与QAbstractSpinBox的editingFinished()函数相关联,该函数在鼠标按下和释放事件中都会被调用。
如果您想要避免这种行为,可以通过以下方式之一来实现:
1. 您可以使用QSpinBox的valueChanged(int)信号来代替editingFinished信号。这个信号只在值更改时发出,而不是在编辑完成时发出。这样,当用户在鼠标移动时,不会触发该信号。
2. 您可以重写QSpinBox的mousePressEvent(QMouseEvent *event)函数,并在其中禁止调用editingFinished()函数。例如:
```python
class MySpinBox(QSpinBox):
def mousePressEvent(self, event):
super().mousePressEvent(event)
self.editingFinished.disconnect()
```
这将在鼠标按下时断开editingFinished信号的连接,因此在鼠标移动时不会触发该信号。
阅读全文