Вызов метода по таймеру в Qt
Использую Qt5.
Пытаюсь сделать вызов метода checkAvailableInterfaces() по таймеру, написал следующий код:
class InterfaceController : public QObject
{
public:
explicit InterfaceController(QObject *parent = nullptr);
public slots:
void checkAvailableInterfaces();
public:
QTimer *checkAvailableInterfacesTimer;
};
InterfaceController::InterfaceController(QObject *parent) : QObject(parent)
{
Logger::writeLogInfo("InterfaceController has been started.");
checkAvailableInterfacesTimer = new QTimer(this);
connect(checkAvailableInterfacesTimer, SIGNAL(timeout()),
this, SLOT(checkAvailableInterfaces()));
checkAvailableInterfaces();
checkAvailableInterfacesTimer->start(3000);
}
void InterfaceController::checkAvailableInterfaces()
{
Logger::writeLogInfo("Run checkAvailableInterfaces()");
}
Всё компилится, но когда доходит до этого метода, то получаю следующий вывод:
[2022-06-17 13:09:23.818] [info] InterfaceController has been started.
[2022-06-17 13:09:23.818] [info] Run checkAvailableInterfaces()
QObject::connect: No such slot QObject::checkAvailableInterfaces() in /home/gleb/Codes/pcpp_monitor/backend/interfacecontroller/interfacecontroller.cpp:14
В чем может быть проблема?
upd
При добавления макроса Q_OBJECT выдает следующее:
/usr/bin/ld: interfacecontroller/libinterfacecontroller.a(interfacecontroller.cpp.o): in function `InterfaceController::InterfaceController(QObject*)':
/home/gleb/Codes/pcpp_monitor/backend/interfacecontroller/interfacecontroller.cpp:7: undefined reference to `vtable for InterfaceController'
collect2: error: ld returned 1 exit status
gmake[3]: *** [CMakeFiles/pcpp_monitor_backend.dir/build.make:119: pcpp_monitor_backend] Error 1
gmake[3]: Leaving directory '/home/gleb/Codes/pcpp_monitor/backend/cmake-build-debug'
gmake[2]: *** [CMakeFiles/Makefile2:162: CMakeFiles/pcpp_monitor_backend.dir/all] Error 2
gmake[2]: Leaving directory '/home/gleb/Codes/pcpp_monitor/backend/cmake-build-debug'
gmake[1]: *** [CMakeFiles/Makefile2:169: CMakeFiles/pcpp_monitor_backend.dir/rule] Error 2
gmake[1]: Leaving directory '/home/gleb/Codes/pcpp_monitor/backend/cmake-build-debug'
gmake: *** [Makefile:118: pcpp_monitor_backend] Error 2
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Надо подключить макрос Q_OBJECT
class InterfaceController : public QObject
{
Q_OBJECT // <--
После чего надо очистить проект и пересобрать