C++ I';我无法将自定义类中的信号连接到主窗口中的插槽

C++ I';我无法将自定义类中的信号连接到主窗口中的插槽,c++,qt,signals-slots,custom-widgets,C++,Qt,Signals Slots,Custom Widgets,因此,我一直在开发我的GUI,它变得相当大,所以我决定将它拆分为多个与主窗口通信的小部件(可能是我从一开始就应该做的事情)。我已经将GUI的一部分划分为一个单独的小部件,但是在主窗口和新小部件之间设置信号和插槽时遇到了问题,我希望您能帮助我找出我做错了什么 主窗口称为robotmainwindow,小部件称为robotTabWidget。在robotmainwindow.h中,我转发声明的robotTabWidget如下: robotTabWidget* robotttabwidget; 然后

因此,我一直在开发我的GUI,它变得相当大,所以我决定将它拆分为多个与主窗口通信的小部件(可能是我从一开始就应该做的事情)。我已经将GUI的一部分划分为一个单独的小部件,但是在主窗口和新小部件之间设置信号和插槽时遇到了问题,我希望您能帮助我找出我做错了什么

主窗口称为robotmainwindow,小部件称为robotTabWidget。在robotmainwindow.h中,我转发声明的robotTabWidget如下:

robotTabWidget* robotttabwidget;
然后,在robotmainwindow.cpp中,我初始化了类:

robottabwidget = new robotTabWidget();
我有一个名为CreateConnectionsinRobotMainWindow的函数,在该函数中,我尝试将robotTabWidget的信号连接到robotmainwindow中的插槽:

void robotmainwindow::createConnections()
{
connect(robottabwidget, &robotTabWidget::sigSendCartCommand, this, &robotmainwindow::slotOnSendCartCommand);
}
signal sigsendcart命令在robottabwidget.h中定义:

void sigSendCartCommand(double);
并在robotTabWidget::on_SendCartCommand_clicked()中发出:

但是,当我尝试编译时,我得到了一个connect函数的“no matching function for call to”,以及“robotTabWidget::sigSendCartCommand(double)受保护”。为什么信号受到保护?我以为你可以从任何地方发出信号。为什么会出现“无匹配函数”错误

这几天给我带来了很多麻烦,我一直没能弄明白。我非常感谢你的帮助

编辑:我已经改变了一些事情,并且修复了一些事情,但是仍然会出错。连接函数现在看起来像:

QObject::connect(myrobotTabWidget, robotTabWidget::sigTest(test), this, &robotmainwindow::slotOnSendCartCommand);
我现在遇到的错误是“不能在没有对象的情况下调用成员函数”:


箭头指向robotTabWidget::sigTest(QString)。我不知道该怎么办。有什么想法吗

哪个Qt版本,4.*还是5.*?另外,将完整的错误消息作为编译器的输出发布。你需要对电脑一丝不苟!我想多一点代码也不会有什么坏处。注意:您可以向前声明一个类,而不是一个对象。另外,您实际要做的是声明一个指向对象的指针,该指针最初是无效的。然后,您不“初始化类”,而是创建该类的实例。我建议你稍微复习一下C++!确保
robotmain窗口
继承自QObject,并且您已将
Q_对象
宏放入类声明中!忘记这样做是一个常见的错误。您不能在Qt4.x中定义的类之外发出信号。在Qt5.x中这是可能的。感谢您对术语的更正,我会记住这些,以备将来参考。我在类方向上有'Q_OBJECT'宏,所以这似乎不是问题所在。我还使用Qt5.x,因此可以从另一个类发出信号(尽管信号是在robotTabWidget中发出的,而不是robotmainwindow,所以我认为它不是从其类外发出的)。我改变了一些情况,新的连接函数看起来像:“QObject::connect(myrobotTabWidget,robotTabWidget::sigTest(test),this,&robotmainwindow::slotOnSendCartCommand);”
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);