2011-02-26 51 views
1

如果林在mainwindow.cpp然後我就可以得到每一個對象在它:QT4:如何從另一個類訪問某個對象的主要內容?

this->ui->textBox ... 

如果什麼有另一個類(myclass2.cpp),我想獲得一個文本框的值。但他們在我的主窗口。我不能使用此 - > ui->文本框

訪問這些對象的方式是什麼?

謝謝你

回答

4

一般來說,這不是特定於Qt的問題。有幾種方法可以做到這一點:

  1. mainwindow提供一種方法,它封裝了你想要的東西,並呼籲從myclass2

    // In mainwindow.cpp: 
    QString mainwindow::valueOfTheTextEditYouAreInterestedIn() const 
    { 
        return ui->textBox->toPlainText(); 
    } 
    

    這有很多好處:乾淨的設計,稍後易於更改,以及高度自我記錄,僅舉幾例。儘管如此,您的myclass2對象仍然需要一個指向主窗口的指針。那麼你會這樣稱呼它:

    // In myclass2.cpp: 
    { 
        // we're in some function of myclass2 
        QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn(); 
    
        // Use the value... 
    } 
    
  2. 提供文本編輯的訪問器。這不是一個好主意,因爲然後myclass2可以改變文本編輯而不知道mainwindow。但是,它看起來像:

    QTextEdit *getTheInterestingTextEdit() 
    { 
        return ui->textBox; 
    } 
    

    這可以變得更可接受返回一個常量指針,使myclass2將能夠讀取,但不能修改,文本編輯值:

    const QTextEdit *getTheInterestingTextEdit() const 
    { 
        return ui->textBox; 
    } 
    

    Qt提供了另一種方式做同樣的事情,但你沒有寫自己的方法吧:

    // In myclass2.cpp: 
    QTextEdit *textBox = theMainWindow->findChild<QTextEdit *>("textBox"); 
    

    其中mainwindow是指向主勝dow對象myclass2需要以某種方式獲得,而"textBox"是您在Designer中給出了有趣文本框的Qt對象名稱。而且它只有在文本編輯對象是主窗口對象的子窗口小部件時才起作用,在這種情況下它應該是這樣。不過,如果你依賴這種技術,你可能會遇到麻煩。

  3. 您總是可以將myclass2作爲mainwindow的朋友。這是多麼不是推薦,我不會發布一些代碼,但。 :-)

+0

Hej謝謝! :) – Revollt 2011-02-26 12:02:06