Невозможно подключить сигнал из внешней разделяемой библиотеки к перегруженному слоту производного класса QWidget - PullRequest
3 голосов
/ 21 мая 2019

Я пытаюсь подключить сигнал из внешней общей библиотеки к перегруженному слоту слота базового класса 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

и вуаля

не может определить, какой экземпляр перегруженной функции "QWidget::update" предназначен.

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

3 голосов
/ 21 мая 2019

Функция QWidget::update() имеет разные аргументы, поэтому она требует явного приведения для нового синтаксиса использования сигнала / слота

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