你可以使用QVBoxLayout和QHBoxLayout来动态添加TextEdit控件。具体步骤如下:
- 在mainwindow.h文件中添加以下代码:
private:
QList<QTextEdit*> m_textEditList; // 用于存储所有的TextEdit控件
private slots:
void on_childCountSpinBox_valueChanged(int count);
- 修改on_childCountSpinBox_valueChanged()函数如下:
void MainWindow::on_childCountSpinBox_valueChanged(int count)
{
// 先清空之前的TextEdit控件
qDeleteAll(m_textEditList);
m_textEditList.clear();
// 动态添加新的TextEdit控件
for (int i = 0; i < count; ++i) {
QLabel* label = new QLabel(QString("Person %1:").arg(i+1));
QTextEdit* textEdit = new QTextEdit;
QHBoxLayout* hBoxLayout = new QHBoxLayout;
hBoxLayout->addWidget(label);
hBoxLayout->addWidget(textEdit);
ui->verticalLayout_3->addLayout(hBoxLayout); // 这里的verticalLayout_3是我在Qt Designer中放置的一个QVBoxLayout控件,用于包含所有新增加的水平布局。
m_textEditList.append(textEdit); // 将新生成的TextEdit控件加入到m_textEditList列表中。
}
}
- 修改on_generateButton_clicked()函数如下:
void MainWindow::on_generateButton_clicked()
{
// 创建XML文档对象
QDomDocument doc;
QDomElement root = doc.createElement("root");
doc.appendChild(root);
// 添加子节点
for (int i = 0; i < m_childCount; ++i) {
QDomElement person = doc.createElement("person");
person.setAttribute("id", QString::number(i+1));
root.appendChild(person);
QDomElement name = doc.createElement("name");
name.appendChild(doc.createTextNode(m_textEditList.at(i)->toPlainText()));
person.appendChild(name);
QDomElement age = doc.createElement("age");
age.appendChild(doc.createTextNode(ui->ageLineEdit->text()));
person.appendChild(age);
}
// 将XML文档写入文件
QFile file(ui->filenameLineEdit->text());
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file);
out.setCodec("UTF-8"); // 设置编码格式为UTF-8
out << doc.toString();
ui->statusBar->showMessage(tr("XML generated successfully for %1 persons.").arg(m_childCount));
}
- 运行程序,用户选择要添加的子节点数量之后会动态生成相应数量的TextEdit控件供用户输入。点击“Generate”按钮可以生成对应数量的XML文档。
希望这个示例能够帮到你!