【问题标题】:How to connect signals to slots between 2 shared libraries如何将信号连接到 2 个共享库之间的插槽
【发布时间】: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.是,我确定。我已经调试了

标签: c++ qt signals-slots


【解决方案1】:

您的代码似乎是正确的,不过您应该尝试这些方法来确定。

QObject::connect 返回一个QMetaObject::Connection,它可以转换为bool,这样您就可以在运行时验证连接是否已按预期创建。

还要确认您是在发出信号的对象而不是其他实例之间创建连接,否则它将永远无法工作。

【讨论】:

  • 伙计们,我很抱歉。这是我的错。错过执行建立连接的代码。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多