假设我有一个值为 123.45 的 QSpinBox。如果我手动编辑它并开始擦除五个,valueChanged 会为值 123.4 触发。如果我继续擦除四个,则会再次发生。
如果我在完成编辑后按回车,它也会被触发。
我想问题是我应该使用 void QAbstractSpinBox::editingFinished () 而不是 valueChanged,但看起来 valueChanged 是推荐的方法,因为我认为有更多示例和用法,所以我想确定这一点。
任何的想法?
假设我有一个值为 123.45 的 QSpinBox。如果我手动编辑它并开始擦除五个,valueChanged 会为值 123.4 触发。如果我继续擦除四个,则会再次发生。
如果我在完成编辑后按回车,它也会被触发。
我想问题是我应该使用 void QAbstractSpinBox::editingFinished () 而不是 valueChanged,但看起来 valueChanged 是推荐的方法,因为我认为有更多示例和用法,所以我想确定这一点。
任何的想法?
最后我在 Qt 文档中找到了该keyboardTracking
属性。易于设置,并且像魅力一样工作!
在我看来,使用任何一个信号都很好,一些 Qt 表单元素同时具有一个editingFinished
和一个????Changed
信号。
多行QTextEdit
只有一个textChanged
,因为按下返回会创建一个新行而不是移动焦点。
您可能希望实现一个键处理程序,以便仅在按下回车键时才执行某些操作。这当然不如 valueChanged() 快,但它可能更有效......
可能看起来像这样
void MyWidget::keyPressEvent(QKeyEvent *event)
{
int key = event->key();
switch (key) {
case Qt::Key_Return:
case Qt::Key_Enter: {
this->start();
break;
}
case Qt::Key_Escape: {
this->close();
break;
}
default:
QWidget::keyPressEvent(event);
}
}
您不会在自己的 MySpinBox 类中实现它,而是在父类中实现它。enter 键从 QSpinBox 传递到它的父级,因为它没有被处理。如果 MyWidget 未处理密钥,则这是在函数结束时执行的操作。然后将其传递给基类。