2009-12-30 5 views
2

J'ai créé un QMainWindow en utilisant QT Designer. Comme nous le savons, il a statusBar par défaut.Pourquoi est cette erreur: la référence à 'statusBar' est ambigu .. à venir? Est-ce un bug?

Par défaut, QT Designer donnait son nom d'objet en tant que "statusBar". Maintenant, quand j'ai essayé d'appeler comme: -

statusBar()->showMessage(tr("File successfully loaded."), 3000); 

que nous avons une fonction avec prototype: QStatusBar * QMainWindow :: statusBar() const

Le compilateur montre l'erreur: -

error: reference to ‘statusBar’ is ambiguous.

error: candidates are: QStatusBar* Ui_MainWindow::statusBar

error: QStatusBar*QMainWindow::statusBar() const

En fait, je suivais un livre "L'art de construire des applications Qt par DANIEL MOLKENTIN". Et je compile le même code donné dans le livre.

code ci-dessus est en mainwindows.cpp et j'ai compris "mainwindow.h" & "ui_mainwindow.h" en elle ...

Est-ce un bogue dans QT4 ??

+0

Vous avez un membre * variable * noms 'statusBar' et une metho d nomme 'statusBar'. Le compilateur ne sait pas lequel utiliser. Cependant, les deux résident dans des classes différentes: 'Ui_MainWindow' et' QMainWindow'. Je me demande quelle est la relation entre ces classes? Si l'un hérite de l'autre, comment se fait-il qu'il n'y ait pas de cachette? Si elles ne sont pas liées, comment se fait-il qu'il y ait un conflit? Etes-vous sûr de ne pas avoir ajouté quelque chose de "bizarre" de votre part? Héritage multiple? – AnT

Répondre

2

Demandez une version spécifique de la méthode statusBar():

Ui_MainWindow::statusBar()->showMessage(tr("File successfully loaded."), 3000); 
+0

Non cela va jeter une erreur .. Il n'y a pas de fonction nommée statusBar dans Ui_MainWindow .. De toute façon, je pense que vous l'avez écrit rapidement. Il devrait être QMainWindow :: statusBar() ..... Mais, l'ordre du jour principal était, est-ce un BUG? –

+1

Ce n'est pas ce que dit l'erreur ci-dessus (dans votre question). Oui, c'est un BUG dans le code __Your__ (ou le livre). Mais sans autre contexte (comme le code), il est impossible de le réduire davantage. –

1

Le problème est que QMainWindow étend Ui_MainWindow, qui définit également la méthode statusBar. Ce n'était probablement pas le cas dans les versions précédentes de QT.

+0

Je suis un débutant pour les choses GUI avec juste la connaissance de base C++. alors ai-je trouvé un bug? –

+0

Non, c'est un comportement normal et pas un bug. Comme il existe deux définitions de statusBar, vous devez en sélectionner une explicitement. – kgiannakakis

1

Je lis aussi ce livre et avait le même problème. La décision est:

  1. invoquez la méthode QMainWindow::statusBar()
    QMainWindow::statusBar()->showMessage(tr("File successfully loaded."), 3000);

  2. ou utiliser un pointeur *statusBar de Ui_MainWindow
    Ui_MainWindow::statusBar->showMessage(tr("File successfully loaded."), 3000);

Questions connexes