QSpinBox ValueChanged被多次触发

时间:2012-04-19 07:31:36

标签: c++ qt signals-slots qspinbox

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

如果我在完成编辑后按Enter键也会被解雇。

我想问题是我应该使用void QAbstractSpinBox :: editingFinished()而不是valueChanged,但看起来像valueChanged是推荐的方法,因为我的意见中有更多的例子和用法,所以我想确定一下此

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

我认为使用任一信号都很好,有几个Qt表单元素都有editingFinished????Changed信号。

  • QLineEdit的
  • QAbstractSpinBox子类:
    • QDateTimeEdit
    • QDoubleSpinBox
    • QSpinBox

多行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。易于设置,就像魅力一样!