如何制作小部件的 QVector?

Posted

技术标签:

【中文标题】如何制作小部件的 QVector?【英文标题】:How do I make a QVector of widgets? 【发布时间】:2009-08-24 03:43:15 【问题描述】:

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

【问题讨论】:

【参考方案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&lt;QComboBox *&gt; listComboBox;listComboBox &lt;&lt; (ui-&gt;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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 上制作小部件

如何在颤动中制作音频修剪小部件

Qt 气球小部件遮罩

如何制作 Qt 交互式文本编辑小部件

如何使用python制作android小部件?

如何使用 tkinter Canvas 小部件制作按钮?