Итак, я работал над своим графическим интерфейсом, и он стал довольно большим, поэтому я решил разделить его на несколько виджетов, которые взаимодействуют с главным окном (вероятно, то, что я должен был сделать с самого начала). Я разделил часть моего графического интерфейса на отдельный виджет, но у меня возникли проблемы с настройкой сигналов и слотов между главным окном и новым виджетом, и я надеялся, что вы поможете мне понять, что я делаю неправильно.
Главное окно называется robotmainwindow, а виджет называется robotTabWidget. В robotmainwindow.h я пересылаю объявленный robotTabWidget как таковой:
robotTabWidget* robotttabwidget;
Затем в robotmainwindow.cpp я инициализировал класс:
robottabwidget = new robotTabWidget();
У меня есть функция под названием создать соединения в robotmainwindow, в которой я пытаюсь подключить сигнал от robotTabWidget к слоту в robotmainwindow:
void robotmainwindow::createConnections()
{
connect(robottabwidget, &robotTabWidget::sigSendCartCommand, this, &robotmainwindow::slotOnSendCartCommand);
}
Сигнал sigSendCartCommand определен в robottabwidget.h:
void sigSendCartCommand(double);
И выдается в robotTabWidget :: on_SendCartCommand_clicked ():
emit sigSendCartCommand(CartCommand);
Но когда я пытаюсь скомпилировать, я получаю «нет соответствующей функции для вызова» для функции подключения, и «robotTabWidget :: sigSendCartCommand (double) защищен». Почему сигнал защищен? Я думал, что вы можете испустить сигнал откуда угодно. И почему я получаю сообщение об ошибке «Нет соответствующей функции»?
Это доставляло мне много хлопот за последние несколько дней, и я не смог этого понять. Буду очень признателен за вашу помощь!
редактировать: я изменил вещи вокруг, и исправил несколько вещей, но я все еще получаю ошибки. Функция подключения теперь выглядит так:
QObject::connect(myrobotTabWidget, robotTabWidget::sigTest(test), this, &robotmainwindow::slotOnSendCartCommand);
Теперь я получаю сообщение об ошибке: «не могу вызвать функцию-член без объекта»:
../RobotInterface2/robotmainwindow.cpp:102:68: error: cannot call member function 'void robotTabWidget::sigTest(QString)' without object
QObject::connect(myrobotTabWidget, robotTabWidget::sigTest(test), this, &robotmainwindow::slotOnSendCartCommand);
И стрелка указывает на robotTabWidget :: sigTest (QString). Я не уверен, что с этим делать. Есть идеи?
Задача ещё не решена.
Других решений пока нет …