如何制作小部件的 QVector?
Posted
技术标签:
【中文标题】如何制作小部件的 QVector?【英文标题】:How do I make a QVector of widgets? 【发布时间】:2009-08-24 03:43:15 【问题描述】:如何在 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
等)的任何数据结构的示例
【问题讨论】:
【参考方案1】:给你:)
#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" );
如果您只是想让一个简单的示例工作,那么您的小部件有一个父级(用于上下文/清理)目的很重要。
希望这会有所帮助。
【讨论】:
我想将 .ui 文件中的组合框插入到列表中。我以这种方式插入:QList<QComboBox *> listComboBox;
listComboBox << (ui->comboBoxTitle);
并像这样检索:QComboBox *comboBox = listComboBox.at(i);
,一切正常! :)
QVector 现在优先于 QList (read more)。【参考方案2】:
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
【讨论】:
以上是关于如何制作小部件的 QVector?的主要内容,如果未能解决你的问题,请参考以下文章