Сигналы тоже заработали. На всякий случай оставлю тут решение:
В интерфейсе плагина добавил такой чистый виртуальный метод:
virtual QObject* getObject() = 0;
В самом классе плагина наследуюсь от QWidget и интерфейса плагина, дальше переопределяю метод getObject():
QObject* TestPlugin::getObject() {
return qobject_cast<QObject*>(this);
}
И переопределяю метод как сигнал:
signals:
void notificationIsReady();
В главной программе соединяю этот сигнал со своим слотом:
connect(testPlugin->getObject(), SIGNAL(notificationIsReady()), this, SLOT(testSlot()));