2012-11-26 37 views
1

是否有不同的方式來創建QObject的動態數組?下面的代碼不會編譯:Qt QObject動態數組

QStringList labels = defaultScene->getLabels(); 
QAction* traceActions = new QAction[labels.size()]; 

的錯誤是:

C2512:「的QAction」:沒有可用的適當的默認構造函數

回答

1

你看到這一點,因爲的QAction沒有默認構造函數。

你可以創建一個指向QAction的指針數組,然後在它自己的實例化每個QAction。

事情大致是這樣:

QAction** actions = new (QAction*)[labels.size()]; 
for(size_t i = 0; i<labels.size(); ++i) 
{ 
    actions[i] = new QAction(constructor params ...); 
} 
+0

謝謝。這將工作正常。 – ChaoSXDemon

+0

@ChaoSXDemon:你在一個現在被刪除的答案的評論中問道,*「在使用[QValueVector]而不是簡單的東西方面有特別的優勢嗎?」 - 請記住,你必須確保你調用delete在所有這些指針中,以及這個答案中的代碼不是異常安全的事實,您是否清楚地看到使用像QValueVector這樣的容器的優點?例外安全,內存泄漏的風險很小或沒有風險,代碼不難看。這些對我來說似乎有很大的優勢。 –

+0

@BenjaminLindley:我個人更喜歡使用標準庫等價物來提供異常安全和生命期控制。 std :: vector 應該這樣做。 –