2017-10-20 27 views
0

J'ai examiné une variété de discussions Qt pour cette erreur "aucune fonction correspondante pour l'appel à" et je ne vois toujours pas ce qui est différent dans ce cas. J'ai réussi à mettre en place des paires de slots/signaux entre les éléments de l'interface graphique, mais pour une raison quelconque, le dernier ensemble de paires slot/signal crée une erreur.Qt emplacement et le signal: pas de fonction correspondante dans MainWindow

Afin de permettre à tous les éléments de l'interface graphique pour mettre à jour la barre d'état de la fenêtre principale, j'ai créé un signal dans chaque panneau, comme indiqué ici

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

Puis, en MainWindow il y a une fente

//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)); 
} 

Et enfin, dans le constructeur MainWindow j'ai déjà plusieurs signaux et j'ai ajouté une nouvelle ligne de connexion pour chaque élément de l'interface graphique.

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 

Donc, autant que je peux dire que la syntaxe est correcte. les deux ui-> panelA et ui sont des pointeurs. Je ne sais pas pourquoi l'un a raison et l'autre a tort. J'apprécierais toutes les suggestions.

Répondre

2

devrait probablement:

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

L'objet ui est pas un MainWindow, mais this sera.

+0

Merci. Idiot de moi à manquer ça. Tu as raison. Ui :: MainWindow * ui n'est pas la même que la classe MainWindow où la méthode est définie. – BSD