Qt - 动态创建,读取和销毁小部件(QLineEdit)

时间:2016-08-07 17:11:56

标签: qt widget dynamically-generated

我有以下情况:

我有QSpinBox,我的应用程序的用户可以选择他想要创建的项目的实例数。在下一步中,他必须为每个项目指定一个名称。我想通过动态创建许多QLabel和QLineEdits来解决这个问题,这些QLabel和QLineEdits对应于用户在SpinBox中选择的数字。所以,当数字上升时,我想添加新的LineEdits,当数字下降时,我想删除现在过时的LineEdits。

嗯,猜猜看 - 这比我想象的要困难得多。我在网上搜索过,但结果令人失望。似乎没有简单的方法来动态创建,维护(可能在列表中?)并销毁这些小部件。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

请花一点时间查看QListWidget,使用QListWidgetItem完成您的确切需要。

一个小例子:此函数向QListWidget添加一个新元素,并将QWidget定义为视图并返回当前索引:

QModelIndex MainWindow::addNewItem(QWidget* widget) {
    QListWidgetItem* item = new QListWidgetItem;
    ui->listWidget->addItem(item1);
    ui->listWidget->setItemWidget(item, widget);
    return ui->listWidget->indexFromItem(item);
}

现在,如果您的用户选择X项,您应该迭代创建X小部件,并且可以将所有小部件保存在QList中:

listWidget.clear();
for (int i=0; i<X; i++) {
    QTextEdit* edit = new QTextEdit();
    const QModelIndex& index = addNetItem(edit);
    qDebug() << "New element: " << index;
    listWidget.append(edit);
    // Handle edit text event
    connect(edit, SIGNAL(textChanged()), this, SLOT(yourCustomHandler()));
}

现在,只显示包含所有编辑字段的列表。