Qt 槽和信号:MainWindow 中没有匹配函数

Qt slot and signal: no matching function in MainWindow

我查看了有关此错误的各种 Qt 讨论 "no matching function for call to",但我仍然看不出这种情况有何不同。我已经成功地在 GUI 元素之间设置了 slot/signal 对,但由于某些原因,最新的 slot/signal 对会产生错误。

为了允许所有 GUI 元素更新主界面上的状态栏 window 我在每个面板中创建了一个信号,如下所示

class PanelA : public QWidget
{
  ...
  public signals:
     void UpdateStatusBar(std::string);
  ...
}

然后在MainWindow中有一个slot

//from MainWindow.h
class MainWindow : public QMainWindow
{
  private slots:
     void ReceiveStatus(std::string);
}

//from MainWindow.cpp
void MainWindow::ReceiveStatus(std::string s)
{
  //I can provide other controls, filters, etc.
  //but currently there are none
  ui->statusBar->showMessage(tr("System status: "+s));
}

最后,在 MainWindow 构造函数中,我已经有了几个信号,并且为每个 GUI 元素添加了一条新的连接线。

connect(ui->panelA, &PanelA::SelectionChanged, ui->panelB, &PanelB::UpdateSelection);
//this one works
connect(ui->panelA, &PanelA::UpdateStatusBar, ui, &MainWindow::ReceiveStatus);
//this one generates an error there is one status bar connection for each

因此,据我所知语法是正确的。 ui->panelA 和 ui 都是指针。我不知道为什么一个是正确的,另一个是错误的。如果有任何建议,我将不胜感激。

可能应该是:

connect(ui->panelA, &PanelA::UpdateStatusBar, this, &MainWindow::ReceiveStatus);

ui 对象不是 MainWindow,但 this 会是。