2016-07-16 116 views
8

我剛剛開始一個Qt教程,我也是C++的初學者級別。在Qt的教程,有使用語句來設置按鈕的文本的例子:我可以使用' - >'操作符通過指針訪問對象指針嗎?

ui->pushButton->setText("Hello"); 

據我所知,我們可以使用->運營商允許指針訪問類的成員。在這種情況下,pushButton->setText("Hello"),但我只是不明白ui->pushButton的含義,我搜索了一些解答,說明ui持有pushButton的引用,但是怎麼做到這一點呢? pushButton是一個指向對象的指針,不是類的成員,我們可以用->來把對象地址指向ui指針嗎?

對不起,我的英語語言不好,我可能會困惑你。我希望有人能提前給我一個清晰的解釋。

回答

8

從你與QT造物主的形式編輯器創建XML產生的ui指針。

您可以在輸出目錄中找到自動生成的頭文件。例如主窗口有一個ui_mainwindow.h。在運行qmake後創建該文件。如果您使用QT Creator,則會自動完成。

下面是一個自動生成的ui的例子:

class Ui_MainWindow 
{ 
public: 
    QWidget *centralWidget; 
    QPushButton *pushButton; 
    QMenuBar *menuBar; 
    QToolBar *mainToolBar; 
    QStatusBar *statusBar; 
    ... 
}; 

uiUi_MainWindow *所以你可以使用它->訪問Ui_MainWindow類的成員,像pushButton

pushButtonQPushButton *所以你可以使用它->訪問QPushButton類的成員,像setText()

ui->pushButton->setText("Hello")是相同的:

Ui_MainWindow * ui = new Ui_MainWindow; 
... 
QPushButton * btn = ui->pushButton; 
btn->setText("Hello"); 

一些修改:

->不允許指針做的事情:)

->只是操作員訪問成員類struct,並且必須應用於指針。如果您有實例,則必須使用.運算符來訪問成員。

請參閱:operators

最後一個similar question你應該閱讀。

+1

我檢查了這個文件夾,它確實存在。我想我缺乏一些基礎知識,比如Qt如何在後臺工作。非常感謝您的詳細解答,我非常感謝。 – Vito

3

「箭頭」運算符->用於取消引用指向對象的指針以獲取其成員。所以如果你有一個指針變量ui中的對象並且對象有一個成員pushButton,那麼你可以使用ui->pushButton來訪問pushButton成員。如果pushButton成員又是一個指向對象的指針,那麼您再次使用->來訪問其成員,如ui->pushButton->setText("Hello")

使用「箭頭」運算符基本上只是取消引用(一元*)和點(.)成員訪問運算符的語法糖。

所以聲明

ui->pushButton->setText("Hello"); 

也可以寫成

(*(*ui).pushButton).setText("Hello"); 
+0

感謝您的回答,Joachim。我明白我們可以使用「 - >」來取消引用指向對象的指針。但是,我不確定「pushButton」是否是「ui」的成員。我看到「pushButton」是Qt中的一個對象名。如果是的話,「pushButton」如何成爲「ui」的成員。 – Vito

+0

@Vito如果'pushButton'不是'ui'對象的成員,你會得到一個編譯器錯誤。 –

+0

我現在明白了,非常感謝 – Vito