所以,我一直在研究我的 GUI,它变得非常大,所以我决定将它分成多个与主窗口通信的小部件(可能我应该从一开始就做一些事情)。我已经将我的 GUI 的一部分划分为一个单独的小部件,但是我在设置主窗口和新小部件之间的信号和插槽时遇到了麻烦,我希望你能帮助我找出我做错了什么。
主窗口称为robotmainwindow,小部件称为robotTabWidget。在robotmainwindow.h 中,我转发声明robotTabWidget 如下:
robotTabWidget* robotttabwidget;
然后,在 robotsmainwindow.cpp 中,我初始化了这个类:
robottabwidget = new robotTabWidget();
我在robotmainwindow中有一个名为create connections的函数,在其中我尝试将robotTabWidget的信号连接到robotmainwindow中的一个插槽:
void robotmainwindow::createConnections()
{
connect(robottabwidget, &robotTabWidget::sigSendCartCommand, this, &robotmainwindow::slotOnSendCartCommand);
}
信号 sigSendCartCommand 在 robotstabwidget.h 中定义:
void sigSendCartCommand(double);
并在 robotsTabWidget::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)。我不知道该怎么办。有任何想法吗?