2009-08-24 63 views
2

我如何做一個QVector(或其他容器類)部件的動態數量,如在Qt的4 QPushButtonQComboBox如何製作小部件的QVector?

我用下面在我的窗口類的構造函數:

QVector<QComboBox*> foo; // Vector of pointers to QComboBox's 

,現在我想用一些數量的控制,可以動態變化,以填補它:

for(int count = 0; count < getNumControls(); ++count) { 
    foo[count] = new QComboBox(); 
} 

我已經尋找幾個小時試圖找到答案。 Qt的論壇提製作QPtrList,但是該類不再存在的Qt4。 我後來試圖讓每個使用數組式索引或.at()功能的文本值。

我真的很感激聲明,初始化和填充任何QWidgets任何數據結構(QComboBoxQPushButton等)

回答

10

在這裏你去:)

#include <QWidget> 
#include <QList> 
#include <QLabel> 
... 
QList< QLabel* > list; 
... 

list << new QLabel(parent, "label 1"); 
.. 
.. 

foreach(QLabel* label, list) { 
label->text(); 
label->setText("my text"); 
} 

如果你是一個例子試圖獲得一個簡單的例子來工作,它的重要是你的小部件有一個父(用於上下文/清理)的目的。

希望這會有所幫助。

+0

我想從的.ui文件到列表中插入組合框。我插入這樣說:'的QList listComboBox;''listComboBox << (ui-> comboBoxTitle);'像這樣檢索:'QComboBox *組合框= listComboBox.at(I);'這是工作的一切優秀! :) – zeFree 2013-01-23 04:29:13

+0

QVector現在優選的QList([閱讀全文](https://stackoverflow.com/a/38263633/6165833))。 – ymoreau 2017-08-22 09:00:40

0
foo[count] = new QComboBox(); 

這不會影響foo的大小。如果在索引計數處沒有項目,則將失敗。 見push_back,或operator<<,該項目添加到列表的末尾。

QVector<QComboBox*> foo; 
// or QList<QComboBox*> foo; 
for(int count = 0; count < getNumControls(); ++count) { 
    foo.push_back(new QComboBox()); 
    // or foo << (new QComboBox()); 
} 

後來,來獲取值:

foreach (QComboBox box, foo) 
{ 
    // do something with box here 
}