2014-08-29 108 views
1

我有一個QGridLayout具有固定數量的行和列填充QToolButton的實例。我想要做的是訪問此佈局中的一個對象,該對象的位置由其座標確定。我知道有QGridLayout :: - > itemAtPosition(行,列)返回一個指向QLayoutItem的指針,但是一旦我將它轉換爲QToolButton(很明顯),並嘗試改變其中的某些東西,我得到一個訪問衝突例外。Qt - QGridLayout訪問元素在座標

這是怎麼了,我試着投QLayoutItem *至* QToolButton:

QToolButton* button = dynamic_cast<QToolButton*>(_ui.gridLayoutLeft->itemAtPosition(x, y)); // gridLayoutLeft is of type QGridLayout* 

的static_cast給了我一個 「無效的類型轉換」 錯誤。 可以做些什麼來實現這種行爲?

我正在使用VS 2013和最新的Qt。

回答

6

試試這個:

QLayoutItem* item = _ui.gridLayoutLeft->itemAtPosition(x, y); 
QWidget* widget = item->widget(); 
QToolButton* button = dynamic_cast<QToolButton*>(widget); 

在實際的代碼不要忘記檢查有效指針。

+0

非常有幫助,謝謝。通過檢查指針的有效性,你的意思是在使用它指向的對象之前檢查指針是否不是nullptr或NULL。 – Venom 2014-08-29 19:25:51

+1

與nullptr(NULL過時)比較或者簡單地寫「if(pointer)」 – Silicomancer 2014-08-29 19:44:16