假设我有一个值为123.45的QSpinBox。如果我手动编辑它并开始擦除5,则会触发valueChanged,值为123.4。如果我继续删除这四个,就会再次发生。
如果我在完成编辑后按回车键,它也会被触发。
我猜问题是我应该使用void QAbstractSpinBox::editingFinished ()而不是valueChanged,但看起来valueChanged是推荐的方法,因为我的观点中有更多的例子和用法,所以我想确定这一点。
有什么想法吗?
发布于 2012-04-19 17:11:36
最后,我在Qt文档中找到了keyboardTracking property。易于设置,并且工作起来像一个护身符!
发布于 2012-04-19 15:52:23
在我看来,使用任何一个信号都很好,有几个Qt表单元素同时具有editingFinished和????Changed信号。
多行QTextEdit只有一个textChanged,因为按return会创建一个新行,而不是移动焦点。
发布于 2012-04-19 15:57:43
您可能希望实现一个键处理程序,以便仅在按下enter键的情况下才执行某些操作。这当然没有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处理的,则这是在函数结束时执行的操作。然后将其向上传递给基类。
https://stackoverflow.com/questions/10223500
复制相似问题