如何将信号连接到 2 个共享库之间的插槽
Posted
技术标签:
【中文标题】如何将信号连接到 2 个共享库之间的插槽【英文标题】:How to connect signals to slots between 2 shared libraries 【发布时间】:2019-05-21 12:21:15 【问题描述】:我有 2 个共享库。我是第一个为特定类实现了一些核心组件。
class CoreClass : public QObject
Q_OBJECT
public:
void doSomeStuff();
signals:
void aSignal();
在第二个中,我为该类实现了一些特定于小部件的选项:
class WidgetClass : public QWidget
Q_OBECJT
public:
WidgetClass();
private:
CoreClass* __core;
现在我想将来自CoreClass
的信号连接到源自QWidget
的WidgetClass
的插槽。
WidgetClass::WidgetClass()
: __core(new CoreClass)
connect(__core, &CoreClass::aSignal, this, qOverload<>(&QWidget::update));
我希望在__core
发出信号aSignal
时更新widget
,但它没有。
===================== 更新======================= ==
那是我的错。连接没有问题。我只是错过了调用函数,它调用了connect
函数。
【问题讨论】:
为什么你认为它没有更新? 您确定发出了信号吗?尝试将其连接到提供一些调试输出的 lambda。 另请注意,调用QWidget::update
不会立即调用QWidget::paintEvent
-- 它只是安排重绘/更新。
@vahancho 因为当小部件被点击并发出信号时,我在CoreClass
上有一些更新,这必须导致前端更改
@G.M.是,我确定。我已经调试了
【参考方案1】:
您的代码似乎是正确的,不过您应该尝试这些方法来确定。
QObject::connect
返回一个QMetaObject::Connection,它可以转换为bool
,这样您就可以在运行时验证连接是否已按预期创建。
还要确认您是在发出信号的对象而不是其他实例之间创建连接,否则它将永远无法工作。
【讨论】:
伙计们,我很抱歉。这是我的错。错过执行建立连接的代码。谢谢大家。以上是关于如何将信号连接到 2 个共享库之间的插槽的主要内容,如果未能解决你的问题,请参考以下文章