如何将信号连接到 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 的信号连接到源自QWidgetWidgetClass 的插槽。

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 个共享库之间的插槽的主要内容,如果未能解决你的问题,请参考以下文章

如何在不声明 32 个插槽的情况下将 32 个按钮的 press() 信号连接到单个函数?

无法将 Qml 信号连接到 C++ 插槽

如何将信号连接到插槽

如何将信号连接到不同线程中的插槽

如何在 .ui 文件中手动将信号连接到插槽?

Qt:如何将不同类的静态信号连接到插槽?