使用Qt
小部件(即QLabel)時,爲什麼我們要使用指針?Qt小部件和指針
例如,爲什麼我們寫:
QLabel *label = new QLabel("Hello");
而且,不:
QLabel label = new QLabel("Hello");
?
謝謝。
使用Qt
小部件(即QLabel)時,爲什麼我們要使用指針?Qt小部件和指針
例如,爲什麼我們寫:
QLabel *label = new QLabel("Hello");
而且,不:
QLabel label = new QLabel("Hello");
?
謝謝。
因爲如果您將在堆棧上創建它們,它們將在範圍結束後被刪除。
如果你會寫是這樣的:)
void foo()
{
QWidget windget;
}
部件將富之後被刪除(被終止。如果使用new
,它將一直存在,直到它將被手動刪除(通常由父Widget)。我不認爲QLabel label = new QLabel("Hello");
甚至會編譯。可能您需要 QLabel label("Hello");
new
返回一個指針。如果你通過動態內存分配創建一個對象 - 你顯然必須使用一個指針。
QLabel label = new QLabel("Hello");
是不正確的代碼,不會編譯。
爲什麼使用小部件的動態分配?因爲它們必須在函數調用之間活動,就像任何事件驅動的GUI系統一樣。堆棧上的分配(本地對象)將在範圍的末尾釋放,這對於小部件來說效果不佳。
我認爲這不是一個Qt問題,這應該是一個C++編程的問題。 您可能以前使用過Java,因爲java沒有指針概念。 我的建議是,在嘗試使用C++和Qt之前,先找一本C++書籍,並學習關於C++指針含義的基本概念和用法。
如果你想定義一個沒有指針的var,它看起來像QLabel label
; 我們得到的標籤:
在C++中,只有通過指針或引用使用var時,var纔會是面向對象的。 Qt是一個面向對象的類庫,所以這就是爲什麼QLabel
是用指針定義的。
只是要完成,沒有理由不應該爲堆棧分配一些小部件。這對於壽命有限的對象尤其方便,如上下文菜單和模態對話框,您必須等待結果。在這些小部件上,通常會調用exec(),直到用戶關閉它爲止。
不能同意更多。 – 2011-04-02 21:18:58