QObject::connect: signal not found in
-
Problem with signals in dynamic libraries.
When I use mylib SHARED an error
qt.core.qobject.connect: QObject::connect: signal not found in TestLib
occure.But if mylib STATIC it works correctly
Why can't
connect()
find signal if it's in dll lybrary?
Below:
CMakeLists.txt, mainwindow.cpp, testlib.h, testlib.cpp
// CMakeLists.txt qt_add_library(mylib SHARED testlib.cpp testlib.h ) target_link_libraries(mylib PUBLIC Qt6::Core ) qt_add_executable(main main.cpp mainwindow.cpp mainwindow.h ) target_link_libraries(main PRIVATE Qt6::Core Qt6::Widgets mylib )
// mainwindow.cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), lib(new TestLib) { bool connected = connect(lib, &TestLib::testSignal, this, []() { qDebug() << "Test Signal"; }); // If mylib SHARED -> error // If mylib STATIC -> Test Signal appears in console lib->interaptSig(); }
// testlib.h #ifndef TESTLIB_H #define TESTLIB_H #include <QObject> class TestLib : public QObject { Q_OBJECT signals: void testSignal(); public: TestLib(QObject *parent = nullptr); void interaptSig(); }; #endif //TESTLIB_H
// testlib.cpp #include "testlib.h" TestLib::TestLib(QObject *parent) : QObject(parent) {} void TestLib::interaptSig() { emit testSignal(); }
-
When you're on windows you forgot to export the class.
-