首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSpinBox ValueChanged被多次发射

QSpinBox ValueChanged被多次发射
EN

Stack Overflow用户
提问于 2012-04-19 15:31:36
回答 3查看 8.1K关注 0票数 1

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

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

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

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-19 17:11:36

最后,我在Qt文档中找到了keyboardTracking property。易于设置,并且工作起来像一个护身符!

票数 1
EN

Stack Overflow用户

发布于 2012-04-19 15:52:23

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-04-19 15:57:43

您可能希望实现一个键处理程序,以便仅在按下enter键的情况下才执行某些操作。这当然没有valueChanged()快,但它可能更高效……

可能看起来像这样

代码语言:javascript
复制
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处理的,则这是在函数结束时执行的操作。然后将其向上传递给基类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10223500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档