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

Cannot connect signal from an outer shared library to overloaded slot of QWidget derived class

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

假设 this 是从 QWidget

派生的 class 的一个实例
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"

但是没用。我有链接器错误。我已经搜索并发现,那 在 connect 函数内使用 SIGNAL/ SLOT 宏连接来自外部共享库的信号是不可能的。如果我使用函数指针可能是可能的。

好的。让我们更改签名:

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

瞧瞧

cannot determine which instance of an overloaded function "QWidget::update" is intended.

谁能帮我解决这个问题?

QWidget::update() 函数有不同的参数,因此需要显式转换以使用新的 signal/slot 语法

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