2017-10-20 82 views
0

我已经看过各种Qt讨论这个错误“没有匹配的函数调用”,我仍然看不到在这种情况下有什么不同。我已成功设置GUI元素之间的插槽/信号对,但由于某种原因,最新一组插槽/信号对正在创建一个错误。Qt插槽和信号:在MainWindow中没有匹配的功能

为了允许所有的GUI元素来更新我已经建立在每个面板的信号的主窗口中的状态栏如下所示

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

然后在主窗口中有一个缝隙

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

回答

2

大概应该是:

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

ui对象不是主窗口,但this会。

+0

谢谢。愚蠢的我想念那个。你是对的。 Ui :: MainWindow * ui与定义方法的MainWindow类不同。 – BSD