2011-06-14 33 views
1

這看起來應該是一個簡單的問題。我的主窗口中有兩個QSpinBoxes,旁邊有一個按鈕。用戶首先使用這些旋鈕選擇複選框數組的尺寸,然後單擊按鈕。這會彈出一個新窗口,其中有複選框。但我遇到的問題是,當我嘗試在彈出窗口的代碼中獲取旋轉盒的值時,出現編譯器錯誤,因爲這些按鈕是私有的。下面是代碼:如何使用Qt Creator從一個窗口中獲取對象的值到另一個窗口的類中?

void DomainGeneration::createBoxes() 
{ 
    int x_dim = MainWindow::ui->xDim->value(); 
    int y_dim = MainWindow::ui->yDim->value(); 
......the code...... 
} 

編譯器錯誤:

'UI ::主窗口*主窗口:: UI' 是在這一範圍內 私人

對象缺少參考 'MainWindow :: ui'從這個位置

所以我的問題是,我如何從不同的窗口訪問這些對象?

回答

3

你有兩個問題:

  1. MainWindow::ui是私人
  2. MainWindow::ui也不是一成不變的,你需要一個主窗口的實際情況,以達到它

爲了解決一個,你通常會創建在MainWindow(或任何需要導出其狀態的類)中的訪問方法。

要解決這兩個問題,您需要一個指向MainWindow實例的指針來調用這些訪問器。

在你的主窗口類,定義是這樣的:

int getXDim() const { return ui->xDim->value(); } 

而得到的指針到你的主窗口,無論它傳遞到您的DomainGeneration的構造函數,或者成createBoxes()方法,這取決於如何/在哪裏這些被調用,並且你是否需要該指針中其他地方的指針。

喜歡的東西:

void DomainGeneration::createBoxes(MainWindow const* main) 
{ 
    int x_dim = main->getXDim(); 
    ... 
} 

(或者只是通過尺寸到方法,顯然)

(這一切都不是Qt的特定這是純C++。)

+0

謝謝先生,工作得很好! – 2011-06-14 19:44:26

+0

你應該只是傳遞信息。當你調用新對話框的構造函數時,你應該知道它,所以只需傳遞它。 – 2011-06-14 20:33:13

相關問題