2009-08-24 19 views
2

Qt 4でQPushButtonQComboBoxなど、ダイナミック数のウィジェットのQVector(または他のコンテナクラス)を作成するにはどうすればよいですか?ウィジェットの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()関数を使用して、それぞれからテキスト値を取得しようとします。ここ

私は、宣言、初期化、および任意のQWidgetsQComboBoxQPushButton、など)の任意のデータ構造を取り込む例を本当に感謝

答えて

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 * comboBox = listComboBox.at(i); ' :) – zeFree

+0

QVectorがQList([続きを読む](https://stackoverflow.com/a/38263633/6165833))より優先されるようになりました。 – ymoreau

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 
} 
関連する問題