2

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

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

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( QComboBox,QPushButton等)的任何数据结构的示例

4

2 回答 2

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" );
}

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

希望这可以帮助。

于 2009-08-24T04:06:52.767 回答
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
}
于 2009-08-26T18:51:17.060 回答