0

所以,我一直在研究我的 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)。我不知道该怎么办。有任何想法吗?

4

0 回答 0