2011-02-17 20 views
0

因此,目前我有用C++編寫的代碼,當從QComboBox中進行選擇時,它會創建一些QLabel,QLineEdit和QCheckBox。但是,我希望能夠訪問我在後面的函數中創建的小部件,以便在從組合框中進行新選擇時銷燬它們。我可以通過使用設計器來訪問創建的對象,通過使用ui->對象,但我無法使用通過使用我自己的代碼創建的對象。我能否這樣做,因爲我知道如何處理這個問題。如何訪問Qt中函數中函數中創建的小部件

總之,我希望能夠根據用戶的選擇動態地創建/銷燬QWidgets。有沒有我應該知道的這樣做或任何文檔的參考?或者我只是完全走錯了這個方向?這裏是我的代碼目前有用於創建對象:

if (eventType == QString::fromStdString("Birthday")) 
    { 

    QLabel *label1 = new QLabel ("Celebrant: "); 
    QLabel *label2 = new QLabel ("Surprise: "); 
    QLineEdit *lineEdit = new QLineEdit; 
    QCheckBox *box = new QCheckBox; 

    ui->gridLayout->addWidget(label1,3,0,1,1, 0); 
    ui->gridLayout->addWidget(label2,4,0,1,1,0); 
    ui->gridLayout->addWidget(lineEdit,3,1,1,1,0); 
    ui->gridLayout->addWidget(box,4,1,1,2,0); 

    } 

回答

2

如果你給他們的名字(使用setObjectName()),你可以稍後使用QObject::findChildren()找到它們。

但是,將它們存儲在成員變量中會不會更容易?

+0

這是一個想法,但如果我這樣做,會有無數的變量。我的意思是,我可以做到這一點,但我不確定這是否是一種好的做法。 – Inanepenguin 2011-02-17 22:42:07

2

那麼,你需要從您要訪問這些代碼的所有部分訪問的範圍內創建變量。最有可能作爲你的窗口類的私有屬性。

1

從您發佈的代碼中,它看起來像要替換網格佈局位置中的現有窗口小部件。如果是這樣的情況下,添加新的小部件的位置之前做到這一點:

QLayoutItem * existingitem = ui->gridLayout->itemAtPosition(x, y); 
if(existingitem) { 
    ui->gridLayout->removeItem(existingitem); 
    delete existingitem; 
} 
相關問題