func:添加key字段重复检测。
This commit is contained in:
@@ -6,7 +6,7 @@ CAttributeEdit::CAttributeEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CA
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle(u8"属性编辑");
|
||||
setMinimumSize(400, 600);
|
||||
setMinimumSize(600, 760);
|
||||
|
||||
connect(ui->btnOk, &QPushButton::clicked, this, &CAttributeEdit::handle_ok);
|
||||
connect(ui->btnCancel, &QPushButton::clicked, this, [&]() {
|
||||
@@ -86,8 +86,8 @@ void CAttributeEdit::init_table()
|
||||
table_->setHorizontalHeaderLabels(list);
|
||||
table_->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
table_->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
|
||||
table_->setColumnWidth(0, 80);
|
||||
table_->setColumnWidth(1, 200);
|
||||
table_->setColumnWidth(0, 100);
|
||||
table_->setColumnWidth(1, 250);
|
||||
QHBoxLayout* ly = new QHBoxLayout();
|
||||
ly->addWidget(table_);
|
||||
ui->widget->setLayout(ly);
|
||||
|
||||
@@ -21,6 +21,14 @@ bool CXmlOpr::parse_xml(std::vector<tinyxml2::XMLElement*>& vec)
|
||||
{
|
||||
std::string next_node{};
|
||||
std::string node_path = opr_base_.node_path;
|
||||
keys_.clear();
|
||||
auto keys = splitString(opr_base_.purpose, ",");
|
||||
for (const auto& item : keys) {
|
||||
if (item.empty()) {
|
||||
continue;
|
||||
}
|
||||
keys_.push_back(item);
|
||||
}
|
||||
|
||||
auto nodes = splitString(opr_base_.node_path, "/");
|
||||
for (const auto& item : nodes) {
|
||||
@@ -71,6 +79,22 @@ void CXmlOpr::del_element(Element_t* ele)
|
||||
parent_node_->DeleteChild(ele);
|
||||
}
|
||||
|
||||
bool CXmlOpr::check_key_exists(const Property_t& property)
|
||||
{
|
||||
if (keys_.size() < 1 || property.size() < 1) {
|
||||
return false;
|
||||
}
|
||||
Element_t* purpose_node = parent_node_->FirstChildElement(opr_base_.the_node.c_str());
|
||||
while (purpose_node) {
|
||||
const char* value = purpose_node->Attribute(keys_[0].c_str());
|
||||
if (property[0].value == std::string(value)) {
|
||||
return true;
|
||||
}
|
||||
purpose_node = purpose_node->NextSiblingElement();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CXmlOpr::save()
|
||||
{
|
||||
auto ret = doc_.SaveFile(xml_path_.c_str());
|
||||
|
||||
@@ -28,6 +28,7 @@ public:
|
||||
void insert_brother_node(Element_t* brother, Element_t* newer);
|
||||
Element_t* copy_element(Element_t* ele);
|
||||
void del_element(Element_t* ele);
|
||||
bool check_key_exists(const Property_t& property);
|
||||
bool save();
|
||||
|
||||
public:
|
||||
@@ -35,10 +36,11 @@ public:
|
||||
void key_value_to_element(Element_t* ele, const Property_t& vec);
|
||||
|
||||
private:
|
||||
tinyxml2::XMLDocument doc_{};
|
||||
OprBase opr_base_{};
|
||||
std::string xml_path_{};
|
||||
Element_t* parent_node_{};
|
||||
tinyxml2::XMLDocument doc_{};
|
||||
OprBase opr_base_{};
|
||||
std::string xml_path_{};
|
||||
Element_t* parent_node_{};
|
||||
std::vector<std::string> keys_{};
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user