如何制作小部件的QVector?

时间:2009-08-24 03:43:15

标签: qt qt4 qwidget qvector

如何在Qt 4中制作动态数量小部件的QVector(或其他一些容器类),例如QPushButtonQComboBox

我在窗口类的构造函数中使用了以下内容:

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等的任何数据结构的示例。

2 个答案:

答案 0 :(得分: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" );
}

如果您只想尝试一个简单的示例,那么重要的是您的小部件具有父级(用于上下文/清理)。

希望这有帮助。

答案 1 :(得分:0)

foo[count] = new QComboBox();

这不会影响foo的大小。如果索引计数中还没有项目,则会失败。 请参阅push_backoperator<<,将项目添加到列表末尾。

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
}