【发布时间】:2015-10-06 11:56:18
【问题描述】:
当我尝试连接一个 BASE 类信号时,Qt 告诉我该信号在 DERIVED 类上不存在。
这是为什么呢?如何告诉 connect 使用 BASE 类?
namespace MyNamespace
{
void register(Derived* derived)
{
// ERROR MSG
// QObject::connect: No such signal MyNamespace::Derived::baseSignal()
QObject::connect( derived, SIGNAL(baseSignal()),
foo, SLOT(fooSlot()));
}
class Base : public QObject
{
Q_OBJECT
signals:
void baseSignal();
};
class Derived : public QObject,
public Base
{
Q_OBJECT
signals:
void derivedSignal();
};
} // namespace MyNamespace
【问题讨论】:
-
如果我在 connect() 中将发件人转换为 Base *,我会得到同样的错误。
-
Derived 包含derivedSignal(),而不是baseSignal()。您告诉 Qt 连接到 baseSignal() 但传递一个 Derived 作为它应该查找该函数的对象。如果将 Base * 传递给 register() 会发生什么?
-
我试图编译它。有一条警告消息告诉我 Derive 不应该从
QObject继承,因为 base 已经从那里继承了。 -
如果我在 connect() 中将发件人转换为 Base *,我会得到同样的错误。
-
而register是关键字,所以你应该再找一个词。