void MainWindow::on_actionAddNode_triggered() { if (0 == xml_doc_ptr_) return; AddNodeDialog dialog; if (QDialog::Accepted != dialog.exec()) return; QString node_name = dialog.GetNodeName(); xmlNodePtr new_node = xmlNewNode(0, BAD_CAST node_name.toUtf8().data()); if (0 == new_node) { QMessageBox::critical(this, tr("Создание узла XML"), tr("Ошибка создания узла %1").arg(node_name), QMessageBox::Ok); return; } QTreeWidgetItem *current_item = 0; xmlNodePtr root_node = xmlDocGetRootElement(xml_doc_ptr_); if (0 == root_node) { // Пустой документ xmlDocSetRootElement(xml_doc_ptr_, new_node); } else { current_item = ui_->xml_tree->currentItem(); xmlNodePtr parent_node = current_item ? GetNode(current_item): root_node; if (0 == xmlAddChild(parent_node, new_node)) { QMessageBox::critical(this, tr("Создание узла XML"), tr("Ошибка создания дочернего узла %1") .arg(node_name), QMessageBox::Ok); return; } } AddItem(new_node, current_item); SetModified(true); }