2013-06-19 43 views
1

所以,我在我的主窗口的Qt的C++形式下面的代碼(下一個按鈕,單擊Slot):爲什麼我不能訪問我的其他形式在Qt控件?

newform *nf = new newform(this); 
    nf->show(); 

我希望能夠訪問WebView控件我把新的形式。經過一番研究,我計算過,叫NF-> UI將是我最好的選擇,以獲取所有newform的控制。於是我走進newform.h,改變了* UI變量市民:

#ifndef NEWFORM_H 
#define NEWFORM_H 

#include <QMainWindow> 

namespace Ui { 
class newform; 
} 

class newform : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit newform(QWidget *parent = 0); 
    ~newform(); 

    Ui::newform *ui; 

}; 

#endif // NEWFORM_H 

然而,每當我試圖打電話NF->用戶界面,下拉菜單不會出現,我仍然無法獲得訪問我的webview。當我輸入我的代碼並嘗試運行時,我得到:

error: invalid use of incomplete type 'class Ui::newform' 
error: forward declaration of 'class Ui::newform' 

發生了什麼事?難道我做錯了什麼?任何幫助表示讚賞。提前致謝。

+0

Ui :: newform是Qt向項目添加新的Designer窗體類時自動生成的類。您是使用Designer Form類選項還是手動添加該類? – ksming

回答

2

的錯誤是因爲你需要訪問UI類定義調用成員函數和訪問它包含的部件,這是一個壞的解決方案,以使對類的內部這樣的依賴。

所以,不要試圖訪問UI(或其他成員)直接,這些都是私人和它的建議,他們保持這種方式,而不是代碼,你需要進入newform類的功能,使該類做你需要從主窗口類觸發的工作,類似於:

class newform : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    explicit newform(QWidget *parent = 0); 
    ~newform(); 

//code a member function (or a slot if you need a signal to trigger it) 
//example:  
    void loadUrlInWebView(QUrl url); 
private: 
    Ui::newform *ui; //leave this private - it's not a good solution to make it public 
}; 

//and in the .cpp file 
void newform::loadUrlInWebView(Qurl url) 
{ 
//you can access the internal widgets here 
    ui->WEBVIEWNAME->load(url); 
//do whatever you need here and you call this public function from other form 
} 
+0

我不認爲你可以調用'newform :: loadUrlInWebView(QUrl)'另一個類沒有實例的類的實例或靜態聲明它。我也試圖找到一個很好的解決方案。當我嘗試使'ui'靜態時,它也會隨機崩潰。 – JVE999

+0

@ JVE999實例被創建,並表明,如果實例需要從未創建它的一類訪問,那麼你需要決定是否需要一個對話框或一個新的一個實例?所以第一種情況:你剛剛編寫一個功能來得到一個指向從創建它的一個,或者第二種情況下創建一個新的實例已經創建的實例(但是這是一個不同的問題,所以也許你應該張貼新的問題你問題細節) – Zlatomir

相關問題