Qt插槽和信号:MainWindow

时间:2017-10-20 15:41:05

标签: c++ qt signals-slots

我已经查看了针对此错误的各种Qt讨论"没有匹配函数来调用"在这种情况下,我仍然看不出有什么不同。我已成功在GUI元素之间设置插槽/信号对,但由于某种原因,最新的插槽/信号对正在创建错误。

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

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

然后在MainWindow中有一个插槽

//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都是指针。我不知道为什么一个是正确的而另一个是错的。我很感激任何建议。

1 个答案:

答案 0 :(得分:2)

可能应该是:

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

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