update:导入数据功能进度更新(未完成)。
This commit is contained in:
		
							parent
							
								
									a89ef1e677
								
							
						
					
					
						commit
						2bc368c781
					
				@ -31,7 +31,7 @@ TabWidth: 4
 | 
				
			|||||||
# 构造函数的初始化列表要么都在同一行,要么都各自一行
 | 
					# 构造函数的初始化列表要么都在同一行,要么都各自一行
 | 
				
			||||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
 | 
					ConstructorInitializerAllOnOneLineOrOnePerLine: true
 | 
				
			||||||
# 每行字符的限制,0表示没有限制
 | 
					# 每行字符的限制,0表示没有限制
 | 
				
			||||||
ColumnLimit: 100
 | 
					ColumnLimit: 110
 | 
				
			||||||
# 允许短的块放在同一行
 | 
					# 允许短的块放在同一行
 | 
				
			||||||
AllowShortBlocksOnASingleLine: false
 | 
					AllowShortBlocksOnASingleLine: false
 | 
				
			||||||
# 是否允许短函数在一行
 | 
					# 是否允许短函数在一行
 | 
				
			||||||
 | 
				
			|||||||
@ -54,12 +54,8 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
 | 
				
			|||||||
    connect(ui->btnImport, &QPushButton::clicked, this, [&]() {
 | 
					    connect(ui->btnImport, &QPushButton::clicked, this, [&]() {
 | 
				
			||||||
        CDataEdit edit;
 | 
					        CDataEdit edit;
 | 
				
			||||||
        edit.is_import_ = true;
 | 
					        edit.is_import_ = true;
 | 
				
			||||||
 | 
					        edit.set_xml_opr(&xml_);
 | 
				
			||||||
        edit.exec();
 | 
					        edit.exec();
 | 
				
			||||||
        if (edit.is_import_sucess_) {
 | 
					 | 
				
			||||||
            CUtil::msg(this, u8"导入成功");
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            CUtil::msg(this, u8"导入失败");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    connect(ui->btnPageNext, &QPushButton::clicked, this, [&]() {
 | 
					    connect(ui->btnPageNext, &QPushButton::clicked, this, [&]() {
 | 
				
			||||||
        unsigned int cur = ui->edCurPage->text().toUInt();
 | 
					        unsigned int cur = ui->edCurPage->text().toUInt();
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@
 | 
				
			|||||||
   <rect>
 | 
					   <rect>
 | 
				
			||||||
    <x>0</x>
 | 
					    <x>0</x>
 | 
				
			||||||
    <y>0</y>
 | 
					    <y>0</y>
 | 
				
			||||||
    <width>985</width>
 | 
					    <width>1211</width>
 | 
				
			||||||
    <height>805</height>
 | 
					    <height>805</height>
 | 
				
			||||||
   </rect>
 | 
					   </rect>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
@ -37,13 +37,6 @@
 | 
				
			|||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
       </widget>
 | 
					       </widget>
 | 
				
			||||||
      </item>
 | 
					      </item>
 | 
				
			||||||
      <item>
 | 
					 | 
				
			||||||
       <widget class="QPushButton" name="btnBackup">
 | 
					 | 
				
			||||||
        <property name="text">
 | 
					 | 
				
			||||||
         <string>备份快照</string>
 | 
					 | 
				
			||||||
        </property>
 | 
					 | 
				
			||||||
       </widget>
 | 
					 | 
				
			||||||
      </item>
 | 
					 | 
				
			||||||
      <item>
 | 
					      <item>
 | 
				
			||||||
       <widget class="QPushButton" name="btnSave">
 | 
					       <widget class="QPushButton" name="btnSave">
 | 
				
			||||||
        <property name="text">
 | 
					        <property name="text">
 | 
				
			||||||
@ -74,6 +67,13 @@
 | 
				
			|||||||
        </property>
 | 
					        </property>
 | 
				
			||||||
       </widget>
 | 
					       </widget>
 | 
				
			||||||
      </item>
 | 
					      </item>
 | 
				
			||||||
 | 
					      <item>
 | 
				
			||||||
 | 
					       <widget class="QPushButton" name="btnBackup">
 | 
				
			||||||
 | 
					        <property name="text">
 | 
				
			||||||
 | 
					         <string>备份快照</string>
 | 
				
			||||||
 | 
					        </property>
 | 
				
			||||||
 | 
					       </widget>
 | 
				
			||||||
 | 
					      </item>
 | 
				
			||||||
      <item>
 | 
					      <item>
 | 
				
			||||||
       <widget class="Line" name="line">
 | 
					       <widget class="Line" name="line">
 | 
				
			||||||
        <property name="orientation">
 | 
					        <property name="orientation">
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,8 @@
 | 
				
			|||||||
#include <QScreen>
 | 
					#include <QScreen>
 | 
				
			||||||
#include <QClipboard>
 | 
					#include <QClipboard>
 | 
				
			||||||
#include <tinyxml2.h>
 | 
					#include <tinyxml2.h>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
#include "../public_def.h"
 | 
					#include "../public_def.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CDataEdit::CDataEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CDataEdit)
 | 
					CDataEdit::CDataEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CDataEdit)
 | 
				
			||||||
@ -10,7 +12,7 @@ CDataEdit::CDataEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CDataEdit)
 | 
				
			|||||||
    ui->setupUi(this);
 | 
					    ui->setupUi(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // setMinimumWidth(600);
 | 
					    // setMinimumWidth(600);
 | 
				
			||||||
    setWindowTitle(u8"源属性编辑");
 | 
					    setWindowTitle(u8"源编辑");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    connect(ui->btnExit, &QPushButton::clicked, this, [&]() { close(); });
 | 
					    connect(ui->btnExit, &QPushButton::clicked, this, [&]() { close(); });
 | 
				
			||||||
    connect(ui->btnAdd, &QPushButton::clicked, this, [&]() { import_data(); });
 | 
					    connect(ui->btnAdd, &QPushButton::clicked, this, [&]() { import_data(); });
 | 
				
			||||||
@ -30,6 +32,11 @@ void CDataEdit::set_data(const QString& data)
 | 
				
			|||||||
    data_ = data;
 | 
					    data_ = data;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CDataEdit::set_xml_opr(CXmlOpr* xml_opr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    xml_opr_ = xml_opr;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CDataEdit::import_data()
 | 
					void CDataEdit::import_data()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QString data = ui->plainTextEdit->toPlainText();
 | 
					    QString data = ui->plainTextEdit->toPlainText();
 | 
				
			||||||
@ -37,18 +44,24 @@ void CDataEdit::import_data()
 | 
				
			|||||||
        CUtil::msg(this, u8"内容为空");
 | 
					        CUtil::msg(this, u8"内容为空");
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (xml_opr_ == nullptr) {
 | 
				
			||||||
 | 
					        CUtil::msg(this, u8"xml_opr无实例。");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    std::vector<std::string> valid_data{};
 | 
				
			||||||
    QStringList list = data.trimmed().split("\n");
 | 
					    QStringList list = data.trimmed().split("\n");
 | 
				
			||||||
    for (int i = 0; i < list.size(); ++i) {
 | 
					    for (int i = 0; i < list.size(); ++i) {
 | 
				
			||||||
        const QString& item = list[i];
 | 
					        const QString& item = list[i];
 | 
				
			||||||
        if (item.trimmed().isEmpty()) {
 | 
					        if (item.trimmed().isEmpty()) {
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        tinyxml2::XMLDocument doc;
 | 
					        if (xml_opr_->check_same_struct (item.toStdString())) {
 | 
				
			||||||
        doc.Parse(item.toStdString().c_str());
 | 
					            CUtil::msg(this, u8"不是合法的xml语句或者与现有结构不一致。");
 | 
				
			||||||
        if (doc.Error()) {
 | 
					 | 
				
			||||||
            CUtil::msg(this, u8"不是合法的xml语句。");
 | 
					 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        valid_data.push_back(item.toStdString());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <QDialog>
 | 
					#include <QDialog>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "xml_opr.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Ui {
 | 
					namespace Ui {
 | 
				
			||||||
class CDataEdit;
 | 
					class CDataEdit;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -18,6 +20,7 @@ public:
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
    void set_data(const QString& data);
 | 
					    void set_data(const QString& data);
 | 
				
			||||||
    void import_data();
 | 
					    void import_data();
 | 
				
			||||||
 | 
					    void set_xml_opr(CXmlOpr* xml_opr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    void showEvent(QShowEvent* event) override;
 | 
					    void showEvent(QShowEvent* event) override;
 | 
				
			||||||
@ -30,6 +33,7 @@ public:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
    Ui::CDataEdit* ui;
 | 
					    Ui::CDataEdit* ui;
 | 
				
			||||||
    QString        data_{};
 | 
					    QString        data_{};
 | 
				
			||||||
 | 
					    CXmlOpr*       xml_opr_{};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif   // DATA_EDIT_H
 | 
					#endif   // DATA_EDIT_H
 | 
				
			||||||
 | 
				
			|||||||
@ -101,6 +101,61 @@ Element_t* CXmlOpr::copy_element(Element_t* ele)
 | 
				
			|||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool CXmlOpr::check_valid_xml_data(const std::string& data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    tinyxml2::XMLDocument doc;
 | 
				
			||||||
 | 
					    doc.Parse(data.c_str());
 | 
				
			||||||
 | 
					    if (doc.Error()) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool CXmlOpr::check_same_struct(const std::string& data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    auto* own_ele = parent_node_->FirstChildElement(opr_base_.the_node.c_str());
 | 
				
			||||||
 | 
					    if (own_ele == nullptr) {
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    tinyxml2::XMLDocument doc;
 | 
				
			||||||
 | 
					    doc.Parse(data.c_str());
 | 
				
			||||||
 | 
					    if (doc.Error()) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const auto* import_ele = doc.FirstChildElement(opr_base_.the_node.c_str());
 | 
				
			||||||
 | 
					    if (import_ele == nullptr) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const auto* attribute = own_ele->FirstAttribute();
 | 
				
			||||||
 | 
					    int own_cnt = 0;
 | 
				
			||||||
 | 
					    while (attribute) {
 | 
				
			||||||
 | 
					        ++own_cnt;
 | 
				
			||||||
 | 
					        if (import_ele->FindAttribute(attribute->Name()) == nullptr) {
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        attribute = attribute->Next();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const auto* attr_import = import_ele->FirstAttribute();
 | 
				
			||||||
 | 
					    int import_cnt = 0;
 | 
				
			||||||
 | 
					    while (attr_import) {
 | 
				
			||||||
 | 
					        ++import_cnt;
 | 
				
			||||||
 | 
					        attr_import = attr_import->Next();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (import_cnt != own_cnt) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool CXmlOpr::import_newer_data(const std::vector<std::string>& vec)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CXmlOpr::del_element(Element_t* ele)
 | 
					void CXmlOpr::del_element(Element_t* ele)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    parent_node_->DeleteChild(ele);
 | 
					    parent_node_->DeleteChild(ele);
 | 
				
			||||||
 | 
				
			|||||||
@ -21,15 +21,23 @@ public:
 | 
				
			|||||||
    ~CXmlOpr();
 | 
					    ~CXmlOpr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    bool       open(const std::string& xml_path);
 | 
					    bool open(const std::string& xml_path);
 | 
				
			||||||
    void       set_baseinfo(const OprBase& base);
 | 
					    void set_baseinfo(const OprBase& base);
 | 
				
			||||||
    bool       parse_xml(std::vector<Element_t*>& vec);
 | 
					    bool parse_xml(std::vector<Element_t*>& vec);
 | 
				
			||||||
    void       copy_and_del(std::vector<Element_t*>& vec, std::vector<Element_t*>& out);
 | 
					    void copy_and_del(std::vector<Element_t*>& vec, std::vector<Element_t*>& out);
 | 
				
			||||||
    void       insert_brother_node(Element_t* brother, Element_t* newer);
 | 
					    void insert_brother_node(Element_t* brother, Element_t* newer);
 | 
				
			||||||
 | 
					    void del_element(Element_t* ele);
 | 
				
			||||||
 | 
					    bool check_key_exists(const Property_t& property);
 | 
				
			||||||
 | 
					    bool save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
    Element_t* copy_element(Element_t* ele);
 | 
					    Element_t* copy_element(Element_t* ele);
 | 
				
			||||||
    void       del_element(Element_t* ele);
 | 
					    // 检查 xml 格式合法性
 | 
				
			||||||
    bool       check_key_exists(const Property_t& property);
 | 
					    bool       check_valid_xml_data(const std::string& data);
 | 
				
			||||||
    bool       save();
 | 
					    // 不检查 xml 格式合法性,请自行调用 check_valid_xml_data
 | 
				
			||||||
 | 
					    bool check_same_struct(const std::string& data);
 | 
				
			||||||
 | 
					    // 不检查 xml 格式合法性,请自行调用 check_valid_xml_data
 | 
				
			||||||
 | 
					    bool import_newer_data(const std::vector<std::string>& vec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    void get_key_value(Element_t* ele, Property_t& vec);
 | 
					    void get_key_value(Element_t* ele, Property_t& vec);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user