无法将信号从外部共享库连接到QWidget派生类的重载插槽

时间:2019-05-21 08:16:31

标签: c++ qt shared-libraries function-pointers signals-slots

我尝试将来自外部共享库的信号连接到基本QWidget类插槽的过载插槽。

假设this是从QWidget派生的类的实例

class MyClass : public QWidget;
...

MyClass* this_instance = new MyClass;

我尝试了以下方法

connect(obj_from_sl, SIGNAL(signalFromSL()), this, SLOT(update()); 
// update() is QWidget's slot
// the "sl" suffixs stands for "shared library"

但是没有用。我有链接器错误。我搜索发现 无法使用SIGNAL函数中的SLOT / connect宏来连接外部共享库的信号。如果使用函数指针,则可能会出现。

好。让我们更改签名:

connect(obj_from_sl, &ClassFromSL::signalFromSL, this, &QWidget::update);
                                                       ^ error comes here

和voilà

  

无法确定打算使用重载函数“ QWidget::update”的哪个实例。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

QWidget::update()函数具有不同的参数,因此对于使用新的信号/插槽语法,它需要显式转换

connect(obj_from_sl, &ClassFromSL::signalFromSL, this, static_cast<void (QWidget::*) )>(&QWidget::update));