Qt插槽和信号:MainWindow中没有匹配的功能

Posted

技术标签:

【中文标题】Qt插槽和信号:MainWindow中没有匹配的功能【英文标题】:Qt slot and signal: no matching function in MainWindow 【发布时间】:2017-10-20 15:41:04 【问题描述】:

我查看了有关此错误“没有匹配的调用函数”的各种 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】:

应该是:

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

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

【讨论】:

谢谢。我很傻,错过了。你说的对。 Ui::MainWindow *ui 与定义方法的 MainWindow 类不同。

以上是关于Qt插槽和信号:MainWindow中没有匹配的功能的主要内容,如果未能解决你的问题,请参考以下文章

将 Worker Thread 信号与 MainWindow 插槽连接时出错(Qt5)

Qt - 仅在发出两个信号时才调用插槽

Qt 插槽,调用没有匹配函数

Qt - 2 类中的信号和插槽

QT将不同类的信号和插槽连接到主窗口类?

Qt - 使用信号/插槽关闭子菜单