首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSpinBox和QDoubleSpinBox不调用valueChanged方法

QSpinBox和QDoubleSpinBox不调用valueChanged方法
EN

Stack Overflow用户
提问于 2019-09-02 14:51:40
回答 2查看 4.3K关注 0票数 2

当qspinbox和doublespinbox的值发生变化时,我所要做的就是调用一个方法。

我不需要修改spinbox的实际值,我只想让它触发另一个方法的调用。为什么下面的代码没有出错或做任何事情?甚至不打电话给这个方法?

cpp

代码语言:javascript
复制
connect(uiSpinBox, SIGNAL(valueChanged()), this, SLOT(slotInputChanged));
connect(uiDoubleSpinBox, SIGNAL(valueChanged()), this, SLOT(slotInputChanged));

void ColorSwatchEdit::slotInputChanged()
{
    qDebug() << "Im here";
}

报头

代码语言:javascript
复制
public:
    QSpinBox *uiSpinBox;
    QDoubleSpinBox *uiDoubleSpinBox;

public slots:
    void slotInputChanged();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-02 15:11:19

即使不使用携带信号的数据,也必须在连接中建立签名:

代码语言:javascript
复制
connect(uiSpinBox, SIGNAL(valueChanged(int)), this, SLOT(slotInputChanged)); 
connect(uiDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(slotInputChanged));

但是,建议您使用新的连接语法,因为它会指示错误:

代码语言:javascript
复制
connect(uiSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &ColorSwatchEdit::slotInputChanged); 
connect(uiDoubleSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &ColorSwatchEdit::slotInputChanged);
票数 5
EN

Stack Overflow用户

发布于 2019-09-02 15:12:52

除了eyllanesc的答案之外,如果可能的话,可以考虑使用FunctionPointer语法。

代码语言:javascript
复制
connect(uiSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &YourClass::slotInputChanged)

代码语言:javascript
复制
connect(uiDoubleSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &YourClass::slotInputChanged)

这样,编译器就可以在编译时判断连接是否无法解析。

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

https://stackoverflow.com/questions/57758998

复制
相关文章

相似问题

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