2009-12-30 21 views
2

我使用QT Designer創建了一個QMainWindow。 正如我們所知,它默認情況下有statusBar。爲什麼會出現這個錯誤:對'statusBar'的引用是不明確的..即將到來?這是一個錯誤?

默認情況下,QT Designer的對象名爲「statusBar」。現在 ,當我試圖調用,如: -

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

,因爲我們有原型的函數:QStatusBar *的QMainWindow ::狀態欄。()const的

編譯器顯示錯誤: -

error: reference to ‘statusBar’ is ambiguous.

error: candidates are: QStatusBar* Ui_MainWindow::statusBar

error: QStatusBar*QMainWindow::statusBar() const

其實,我正在關注一本書「DANIEL MOLKENTIN構建Qt應用程序的藝術」。我正在編寫書中給出的相同代碼。

上面的代碼是在mainwindows.cpp,我已經列入「mainwindow.h」在它&「ui_mainwindow.h」 ......

這是QT4的錯誤?

+0

你有一個成員*變量*名稱來調用方法QMainWindow::statusBar()
QMainWindow::statusBar()->showMessage(tr("File successfully loaded."), 3000);

  • 或使用指針*statusBar 'statusBar'和一個方法d名稱爲'statusBar'。編譯器不知道使用哪一個。但是,它們都駐留在不同的類中:'Ui_MainWindow'和'QMainWindow'。我想知道這些類之間有什麼關係?如果一個人從另一個人那裏繼承,那麼怎麼沒有恥辱隱藏?如果他們不相關,怎麼會有衝突?你確定自己沒有添加「陌生」的東西嗎?多重繼承? – AnT 2009-12-30 23:38:58

  • 回答

    2

    詢問該法的狀態欄。()的特定版本:

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

    沒有,這將引發錯誤..在Ui_MainWindow中沒有名爲statusBar的函數..無論如何,我認爲你寫的很匆忙。它應該是QMainWindow :: statusBar()..... 但是,主要議題是,它是一個BUG? – 2009-12-30 16:51:57

    +1

    這不是上面的錯誤(在你的問題中)所說的。是的,這是__Your__代碼(或本書)中的一個BUG。但沒有進一步的背景(如代碼),它是可以進一步縮小範圍。 – 2009-12-30 17:25:36

    1

    問題是QMainWindow擴展了Ui_MainWindow,它也定義了statusBar方法。

    也許在QT以前的版本中情況並非如此。

    +0

    我是基礎C++知識的GUI人員的新手。 所以我發現了一個錯誤? – 2009-12-30 15:40:21

    +0

    不,這是正常的行爲,而不是一個錯誤。既然有兩個statusBar的定義,你需要明確地選擇一個。 – kgiannakakis 2009-12-30 15:56:49

    1

    我也讀過那本書,並有同樣的問題。該決定是:

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

    相關問題