我有以下情况:
我有QSpinBox,我的应用程序的用户可以选择他想要创建的项目的实例数。在下一步中,他必须为每个项目指定一个名称。我想通过动态创建许多QLabel和QLineEdits来解决这个问题,这些QLabel和QLineEdits对应于用户在SpinBox中选择的数字。所以,当数字上升时,我想添加新的LineEdits,当数字下降时,我想删除现在过时的LineEdits。
嗯,猜猜看 - 这比我想象的要困难得多。我在网上搜索过,但结果令人失望。似乎没有简单的方法来动态创建,维护(可能在列表中?)并销毁这些小部件。有人能指出我正确的方向吗?
答案 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()));
}
现在,只显示包含所有编辑字段的列表。