2

假设我有一个值为 123.45 的 QSpinBox。如果我手动编辑它并开始擦除五个,valueChanged 会为值 123.4 触发。如果我继续擦除四个,则会再次发生。

如果我在完成编辑后按回车,它也会被触发。

我想问题是我应该使用 void QAbstractSpinBox::editingFinished () 而不是 valueChanged,但看起来 valueChanged 是推荐的方法,因为我认为有更多示例和用法,所以我想确定这一点。

任何的想法?

4

3 回答 3

2

最后我在 Qt 文档中找到了该keyboardTracking属性。易于设置,并且像魅力一样工作!

于 2012-04-19T09:11:36.217 回答
0

在我看来,使用任何一个信号都很好,一些 Qt 表单元素同时具有一个editingFinished和一个????Changed信号。

  • QLine编辑
  • QAbstractSpinBox 子类:
    • QDateTime编辑
    • QDoubleSpinBox
    • QSpinBox

多行QTextEdit只有一个textChanged,因为按下返回会创建一个新行而不是移动焦点。

于 2012-04-19T07:52:23.137 回答
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 类中实现它,而是在父类中实现它。enter 键从 QSpinBox 传递到它的父级,因为它没有被处理。如果 MyWidget 未处理密钥,则这是在函数结束时执行的操作。然后将其传递给基类。

于 2012-04-19T07:57:43.117 回答