【发布时间】:2013-07-30 09:23:57
【问题描述】:
当实现类已经从 QObject/QWidget 派生时,如何在抽象类/接口中声明 Qt 信号?
class IEmitSomething
{
public:
// this should be the signal known to others
virtual void someThingHappened() = 0;
}
class ImplementEmitterOfSomething : public QWidget, public IEmitSomething
{
// signal implementation should be generated here
signals: void someThingHappended();
}
【问题讨论】:
-
您可以只写
signals: void someThingHappened();。不需要实现信号。 -
我知道信号是在实现中生成的,但是如果只知道接口,观察者怎么知道这是一个(qt)信号?
-
@Beachwalker 我已经在我的回答中用信号替换了受保护的关键字。它会悬停您的问题。
-
你不能将信号声明取出到接口中,因为它使用
QObject meta system,所以你的interface是有效的,你应该从QObject扩展IInterface并附加宏@987654327 @,但是多重继承(Qwidget和Qobject)调用编译报错 -
@Saz 这仅在 Qt 4 之前是正确的。在 Qt 5 中,信号是公开的 - 否则新的连接语法将不起作用。
标签: c++ qt qt-signals