如何在Qt 4中制作动态数量小部件的QVector
(或其他一些容器类),例如QPushButton
或QComboBox
?
我在窗口类的构造函数中使用了以下内容:
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
等的任何数据结构的示例。
答案 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_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
}