2011-11-22 44 views
0

我創建了一些對話框,並且在此對話框中我有一個由少數複選框組成的垂直佈局。我想通過包含它們的佈局在運行時訪問這些複選框。這可能嗎?在運行時訪問佈局

回答

1

如果你有一個名爲對話框myDialog您可以通過

myDialog->layout() 

訪問它的佈局本身自QObject繼承的佈局和類似的可以訪問QObject::children()方法。

例如,你可以做這樣的事情:

QCheckBox* currentCheckBox; 
foreach(QObject* child, myDialog->layout()->children()) 
{ 
    currentCheckBox = qobject_cast< QCheckBox* >(child); 
    if(!currentCheckBox) continue; 

    // do anything with the checkbox here 
} 
+0

嗨蒂姆,很好的回答謝謝。 – smallB

0

@Tim:也有類似的問題,發現你的答案非常有幫助。

但至少使用PyQt4我發現佈局本身似乎沒有孩子(children()給出了一個空的列表),相反,它們是由我們的佈局所在的小部件「parented」。

所以在Python中,那將是myDialog.children()而不是myDialog.layout().children()

然後,很明顯,有可能是這些孩子中的其他元素,從我們的佈局不一定來了(至少在我的情況下有)。

此外,在更一般的情況下,the order of QObject's children could be unstable - 儘管我認爲複選框這是不太可能的情況下。

所以,我寧願使用的佈局的.itemAt()方法。

我用C++猜想它會是這樣的

for(int i=0; ++i; i<layout->count()) 
{ 
    widget = layout->itemAt(i)->widget() 
    // ... do whatever you want 
} 

在Python,這是

for i in xrange(layout.count()) : 

    widget = layout.itemAt(i).widget() 
    # ... whatever) 

可能存在的東西,在這裏改變QT3以及Qt4之間?