gpt4 book ai didi

c++ - Qt:子类中无法识别继承的信号

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:24 35 4
gpt4 key购买 nike

我创建了一个为其所有子类提供公共(public)信号的基类:

#include <QWidget>

namespace Dino {

/**
* @brief Base class for all single-value settings editors
*
* Provides a valueChanged() signal that can be used to propagate changes to
* values up to the MainWindow
*/
class TypeEditor : public QWidget
{
Q_OBJECT
public:
explicit TypeEditor(QWidget *parent = 0):QWidget(parent){}

signals:
void valueChanged();
};

} // namespace Dino

在一个子类中,我想要这个信号可用,但也定义一个更具体的同名但参数不同的信号:

#include "ui/typeeditor.h"

namespace Dino {

class BoolEditor : public TypeEditor
{
Q_OBJECT
public:
explicit BoolEditor(QWidget* parent = 0):TypeEditor(parent){}

signals:
void valueChanged(bool value);

public slots:
void setValue(bool value)
{
emit valueChanged(value);
emit valueChanged();
}
};

} // namespace Dino

想法是,当只知道基类类型时,可以使用广义信号,告诉值发生了变化。当确切的子类类型已知时,另一个信号可用,它告诉新值。

现在,当我尝试编译时,我在 emit valueChanged() 上收到一个错误,指出没有名为 Dino::BoolEditor::valueChanged() 的函数.

当我将基类中的信号重命名为其他名称时它起作用了,所以这似乎是信号过载的问题。我会对这样做的原因感兴趣。是我不知道的某些设计要求阻止我在子类中重载信号,还是我只是在代码中遗漏了一些东西?

最佳答案

Signal 只是一个 protected 函数。你不能像那样重载基类函数

参见 this question了解更多详情

关于c++ - Qt:子类中无法识别继承的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16604906/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com