QT开发中文网

如何做到在用户选择了子节点数量之后让mainwindow产生相应数量的TextEdit供用户输入呢?

你可以使用QVBoxLayout和QHBoxLayout来动态添加TextEdit控件。具体步骤如下:

  1. 在mainwindow.h文件中添加以下代码:
private:
    QList<QTextEdit*> m_textEditList; // 用于存储所有的TextEdit控件

private slots:
    void on_childCountSpinBox_valueChanged(int count);
  1. 修改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列表中。
    }
}
  1. 修改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));
}
  1. 运行程序,用户选择要添加的子节点数量之后会动态生成相应数量的TextEdit控件供用户输入。点击“Generate”按钮可以生成对应数量的XML文档。

希望这个示例能够帮到你!

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=2733

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?