假设我有一个QSpinBox,其值为123.45。如果我手动编辑它并开始删除五个值,则会为值123.4触发valueChanged。如果我继续擦除这四个,我会再次发生。
如果我在完成编辑后按Enter键也会被解雇。
我想问题是我应该使用void QAbstractSpinBox :: editingFinished()而不是valueChanged,但看起来像valueChanged是推荐的方法,因为我的意见中有更多的例子和用法,所以我想确定一下此
有什么想法吗?
答案 0 :(得分:0)
我认为使用任一信号都很好,有几个Qt表单元素都有editingFinished
和????Changed
信号。
多行QTextEdit
只有一个textChanged
,因为按下返回会创建一个新行而不会移动焦点。
答案 1 :(得分:0)
您可能希望实现一个键处理程序来执行某些操作 如果是按下了回车键。这当然不像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类中实现它, 但是在父类中。回车键从QSpinBox传递给它的父级,因为它没有被处理。如果MyWidget未处理该键,则在函数结束时执行此操作。然后将它传递给基类。
答案 2 :(得分:0)
最后我在Qt文档中找到了keyboardTracking
property。易于设置,就像魅力一样!