Qt通过读取xml文件的内容来更新表格,通知表格设置完的数据存储到ini文件和xml中,支持超级模式界面直接更加新的可编辑项,可编辑的项包括字符串、bool等,并且通过485走ymodem协议传输。

#ifndef FACTORYCONFIGWIDGET_H
#define FACTORYCONFIGWIDGET_H

#include <QDialog>
#include <QWidget>
#include <QTableWidget>
#include <QDomDocument>
#include <QXmlStreamWriter>
#include <QFile>
#include <QXmlStreamReader>
#include <QTabWidget>
#include <QTableWidgetItem>
#include <QTimer>
#include "messagebase.h"
#include "message.h"
#include <QHeaderView>

namespace Ui {
class FactoryConfigWidget;
}
struct parStruct{
    QString Name;  //
    QString Value;  //
    QString Unit;  //
    QString Min;  //
    QString Max;  //
    QString type;  //
};

Q_DECLARE_METATYPE(parStruct)

class FactoryConfigWidget : public QDialog
{
    Q_OBJECT

    enum FileSendStage {
        FileSendIdle,
        FileSendStart,
        FileSendProcess,
        FileSendStop
    };

public:
    explicit FactoryConfigWidget(QWidget *parent = nullptr);
    ~FactoryConfigWidget();
    void setxmlfile(QString xml);

public slots:
    void onAddRowForTable();
    void ondelRowForTable();
    void GetInfoFromTab(void);
    void fileSendProcess();
//    void receiveBusCanMess(MessageCANReceive msg);
//    void receiveBus485Mess(MessageRS485Receive msg);

private slots:
    void on_pushButton_close_clicked();
    void on_pushButton_Save_clicked();
    void on_pushButton_Super_clicked();
    void on_pushButton_Name_clicked();
    void on_pushButton_Value_clicked();
    void on_pushButton_Unit_clicked();
    void on_pushButton_Min_clicked();
    void on_pushButton_Max_clicked();
    void on_comboBox_type_currentIndexChanged(const QString &arg1);
    void on_pushButton_NewTab_clicked();

private:
    Ui::FactoryConfigWidget *ui;
//    void setFileCmd(unsigned char cmd, unsigned char para);
//    void setRS485File(QString file,int cmd);
    bool parse(const QString &filePath);
    void populateTable(QTableWidget *table, const QList<QVariantMap> &params);
    QList<QPair<QString, QList<QVariantMap>>> tabData;
    QList<QPair<QString, QTableWidget*>> tables; // 例如,使用字符串作为标识符与表格关联
    QTableWidget *getTable(const QString& tableName);
    bool SaveXmlandIni(void);
    bool AddParCheck(void);
    QString Inputfuc(QString buttonName);
    QTableWidget *NowTable;
    QString tablename;
    QString filename;
    QString labletiteltxt;
    QTimer m_timer;
//    int m_errcount;
//    int m_controlNet;
//    FileSendStage m_sendStatus;
//    bool m_waitsend;
//    bool m_sendok;
    QString m_inipath;
    QStringList globalTab;
};

#endif // WIDGET_H

#include "FactoryConfigWidget.h"
#include "ui_FactoryConfigWidget.h"
#include <QDebug>
#include "pareditdelegate.h"
#include <QTextCodec>
#include <QSettings>
#include <QMessageBox>
#include "processmessagethread.h"
#include "runningnetmanager.h"
#include "canframehead.h"
#include "pareditdelegate.h"
#include "inputdialog.h"
#include "FileSendGetFrom485.h"

#define  ROW_HEIGHT 50
bool m_superMode=false;

FactoryConfigWidget::FactoryConfigWidget(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::FactoryConfigWidget)
{
    ui->setupUi(this);
    Qt::WindowFlags flags = windowFlags();
    setWindowFlags(flags | Qt::FramelessWindowHint | Qt::MSWindowsFixedSizeDialogHint);
    if(m_superMode==false)
    {
        ui->pushButton_NewTab->setEnabled(false);
        ui->pushButton_add->setEnabled(false);
        ui->pushButton_del->setEnabled(false);
        ui->pushButton_Super->setText("S.OFF");
        ui->pushButton_Name->setEnabled(false);
        ui->pushButton_Value->setEnabled(false);
        ui->pushButton_Unit->setEnabled(false);
        ui->pushButton_Min->setEnabled(false);
        ui->pushButton_Max->setEnabled(false);
        ui->comboBox_type->setEnabled(false);
    }
    else {
        ui->pushButton_NewTab->setEnabled(true);
        ui->pushButton_add->setEnabled(true);
        ui->pushButton_del->setEnabled(true);
        ui->pushButton_Super->setText("S.ON");
        ui->pushButton_Name->setEnabled(true);
        ui->pushButton_Value->setEnabled(true);
        ui->pushButton_Unit->setEnabled(true);
        ui->pushButton_Min->setEnabled(true);
        ui->pushButton_Max->setEnabled(true);
        ui->comboBox_type->setEnabled(true);
    }
    // 假设你已经有了一个QTableWidget指针叫做tableWidget
    connect(ui->pushButton_add, &QPushButton::clicked, this, &FactoryConfigWidget::onAddRowForTable);
    connect(ui->pushButton_del, &QPushButton::clicked, this, &FactoryConfigWidget::ondelRowForTable);
//    m_controlNet = RunningNetManager::getInstance()->getNetNum();
    m_timer.setParent(this);
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(fileSendProcess()));
}


FactoryConfigWidget::~FactoryConfigWidget()
{
    delete ui;
}
void FactoryConfigWidget::setxmlfile(QString xml)
{
    filename= xml;
    if(filename == NULL)return;
    // Assuming the XML file is named "config.xml" and is located in the same directory as the executable.
    labletiteltxt.clear();
    if (parse(filename)) {
        if(!labletiteltxt.isEmpty())
        ui->labelTitle->setText(labletiteltxt+" config");
        for (const auto &entry : tabData) {
            const QString &tabName = entry.first; // 获取键(tab名称)
            const QList<QVariantMap> &params = entry.second; // 获取与键关联的QVariantMap
            QTableWidget *table = new QTableWidget(ui->tabWidget);
            populateTable(table, params);
            table->setEditTriggers(QAbstractItemView::SelectedClicked | QAbstractItemView::CurrentChanged);
            table->setItemDelegateForColumn(1,new ParEditDelegate(this));
            ui->tabWidget->addTab(table, tabName);
            tables.append(qMakePair(tabName, table)); // 添加到列表
        }
    } else {
        qDebug() << "Failed to parse XML.";
    }
    ui->tabWidget->currentChanged(1);
    GetInfoFromTab();
}

bool FactoryConfigWidget::parse(const QString &filePath)
{
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "Failed to open XML file.";
        return false;
    }
    globalTab.clear();
    QXmlStreamReader xmlReader(&file);
    while (!xmlReader.atEnd() && !xmlReader.hasError()) {
        QXmlStreamReader::TokenType token = xmlReader.readNext();
        if (token == QXmlStreamReader::StartDocument) {
            continue;
        }
        if (token == QXmlStreamReader::StartElement) {
            if (xmlReader.name() == QLatin1String("Tab")) {
                QString tabName = xmlReader.attributes().value(QLatin1String("Name")).toString();
                if(xmlReader.attributes().value(QLatin1String("global")).toInt()==1)
                {
                    globalTab.append(tabName);
                }
                while (xmlReader.readNextStartElement()) {
                    // 假设tabDataList是类成员变量,已经在外部定义好
                    if (xmlReader.name() == QLatin1String("Parameter")) {
                        QVariantMap param;
                        param["Name"] = xmlReader.attributes().value(QLatin1String("Name")).toString();
                        param["Value"] = xmlReader.attributes().value(QLatin1String("Value")).toString();
                        param["Unit"] = xmlReader.attributes().value(QLatin1String("Unit")).toString();
                        param["Min"] = xmlReader.attributes().value(QLatin1String("Min")).toString();
                        param["Max"] = xmlReader.attributes().value(QLatin1String("Max")).toString();
                        param["Type"] = xmlReader.attributes().value(QLatin1String("Type")).toString();
                        // 查找或创建对应tabName的参数列表
                        bool found = false;
                        for (auto &entry : tabData) {
                            if (entry.first == tabName) {
                                entry.second.append(param);
                                found = true;
                                break;
                            }
                        }

                        // 如果没有找到,则创建新的条目并添加
                        if (!found) {
                            QList<QVariantMap> newList;
                            newList.append(param);
                            tabData.append(qMakePair(tabName, newList));
                        }
                        xmlReader.skipCurrentElement();
                    } else {
                        xmlReader.skipCurrentElement();
                    }
                }
            }
            else if (xmlReader.name() == QLatin1String("FactoryCfg")) {
                 labletiteltxt= xmlReader.attributes().value(QLatin1String("Type")).toString();
            }
        }
    }

    if (xmlReader.hasError()) {
        qDebug() << "Error parsing XML:" << xmlReader.errorString();
        return false;
    }

    return true;

}
void FactoryConfigWidget::populateTable(QTableWidget *table, const QList<QVariantMap> &params)
{
    table->setColumnCount(6);
    table->setHorizontalHeaderLabels({"Name", "Value", "Unit", "Min", "Max", "Type"});
    // 获取水平头视图,并设置列宽调整模式
    table->setColumnHidden(5, true);
    table->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
    table->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
    table->setColumnWidth(0,180);
    QHeaderView *headerView = table->horizontalHeader();
    headerView->setSectionResizeMode(0, QHeaderView::Fixed); // 第一列适应内容
    headerView->setSectionResizeMode(1, QHeaderView::Stretch); // 第2列拉伸填充
    headerView->setSectionResizeMode(2, QHeaderView::Stretch); // 第3列拉伸填充
    headerView->setSectionResizeMode(3, QHeaderView::Stretch); // 第4列拉伸填充
    headerView->setSectionResizeMode(4, QHeaderView::Stretch); // 第5列拉伸填充
//    headerView->setSectionResizeMode(5, QHeaderView::Stretch); // 第6列拉伸填充
    for (const auto &param : params) {
        int row = table->rowCount();
        table->insertRow(row);
        // 使用value方法确保安全访问,防止因键缺失导致的崩溃
        QTableWidgetItem *pItem1 = new QTableWidgetItem(param.value("Name").toString());
        pItem1->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        pItem1->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        pItem1->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
        table->setItem(row,0,pItem1);
        QTableWidgetItem *pItem2 = new QTableWidgetItem(param.value("Value").toString());
        pItem2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
//        pItem2->setBackground(QColor(56, 56, 56)); // Replace Qt::red with any QColor of your choice.
//        pItem2->setTextColor(Qt::white); // Replace Qt::red with any QColor of your choice.
        table->setItem(row,1,pItem2);
        if(pItem1->text()=="Version")
        {
            pItem2->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
            pItem2->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
        }
        else
        {
            pItem2->setBackground(QColor(56, 56, 56)); // Replace Qt::red with any QColor of your choice.
            pItem2->setTextColor(Qt::white); // Replace Qt::red with any QColor of your choice.
        }
//        if(pItem1->text()=="Version")
//        {
//            pItem2->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
//        }
        QTableWidgetItem *pItem3 = new QTableWidgetItem(param.value("Unit").toString());
        pItem3->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        pItem3->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        pItem3->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
        table->setItem(row,2,pItem3);
        QTableWidgetItem *pItem4 = new QTableWidgetItem(param.value("Min").toString());
        pItem4->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        pItem4->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        pItem4->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
        table->setItem(row,3,pItem4);
        QTableWidgetItem *pItem5 = new QTableWidgetItem(param.value("Max").toString());
        pItem5->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        pItem5->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        pItem5->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
        table->setItem(row,4,pItem5);
        QTableWidgetItem *pItem6 = new QTableWidgetItem(param.value("Type").toString());
        pItem6->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        table->setItem(row,5,pItem6);
        pItem6->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        table->setRowHeight(row, ROW_HEIGHT);
    }
}
QTableWidget* FactoryConfigWidget::getTable(const QString &tableName)
{
    for (const auto& entry : tables) {
        if (entry.first == tableName) {
            return entry.second; // 找到匹配的tableName,返回对应的QTableWidget指针
        }
    }
    return nullptr; // 如果遍历完没有找到匹配项,返回nullptr
}

bool FactoryConfigWidget::AddParCheck()
{
    if(ui->pushButton_Name->text().isEmpty())
        return false;
    if(ui->pushButton_Value->text().isEmpty())
        return false;
    if((ui->comboBox_type->currentText()!="string")&&(ui->comboBox_type->currentText()!="comb"))
    {
        if(ui->pushButton_Min->text().isEmpty())
            return false;
        if(ui->pushButton_Max->text().isEmpty())
            return false;
        QString comb_text=ui->comboBox_type->currentText();
        bool valueisInt,minisInt,maxisInt ;
        int txt_value=ui->pushButton_Value->text().toInt(&valueisInt);
        int txt_min=ui->pushButton_Min->text().toInt(&minisInt);
        int txt_max=ui->pushButton_Max->text().toInt(&maxisInt);
        bool valueisfloat,minisfloat,maxisfloat ;
        int txt_valuef=ui->pushButton_Value->text().toFloat(&valueisfloat);
        int txt_minf=ui->pushButton_Min->text().toFloat(&minisfloat);
        int txt_maxf=ui->pushButton_Max->text().toFloat(&maxisfloat);
        if(comb_text == "int")
        {
            if (!(valueisInt&minisInt&maxisInt))
            {
                // 文本不可以转换为整数
                return false;
            }
            else
            {
              if(txt_min>txt_max)
                  return false;
              if((txt_value > txt_max)||(txt_value < txt_min))
                  return false;
            }
        }
        else if(comb_text == "float")
        {
            if (!(valueisfloat&minisfloat&maxisfloat))
            {
                // 文本不可以转换为整数
                return false;
            }
            else
            {
              if(txt_minf > txt_maxf)
                  return false;
              if((txt_valuef > txt_maxf)||(txt_valuef < txt_minf))
                  return false;
            }
        }
        else if(comb_text == "bool")
        {
            if (!(valueisInt&minisInt&maxisInt))
            {
                // 文本不可以转换为整数
                return false;
            }
            else
            {
                if(txt_min!=0)
                    return false;
                if(txt_max!=1)
                    return false;
                if((txt_value!=1)&&(txt_value!=0))
                    return false;
            }
        }
    }
    return true;
}


void FactoryConfigWidget::onAddRowForTable()
{
    if(AddParCheck() == false)
    {
        ui->labelMessage->setText("Par error!");
        return;
    }
    else
    {
        ui->labelMessage->setText("Add ok");
    }
    GetInfoFromTab();
    if(NowTable==nullptr) return;
//    int row = NowTable->rowCount();
    int row = NowTable->currentRow()+1;
//    NowTable->setColumnHidden(5, true);
    NowTable->insertRow(row);
//    NowTable->setRowHeight(row,ROW_HEIGHT);
    // 假设表格有6列,按需填写
    QTableWidgetItem *nameItem = new QTableWidgetItem(ui->pushButton_Name->text());
    nameItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
    nameItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    nameItem->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
    QTableWidgetItem *valueItem = new QTableWidgetItem(ui->pushButton_Value->text());
    valueItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    if(nameItem->text()=="Version")
    {
        valueItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        valueItem->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
    }
    else
    {
        valueItem->setBackground(QColor(56, 56, 56)); // Replace Qt::red with any QColor of your choice.
        valueItem->setTextColor(Qt::white); // Replace Qt::red with any QColor of your choice.
    }
    QTableWidgetItem *unitItem = new QTableWidgetItem(ui->pushButton_Unit->text());
    unitItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
    unitItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    unitItem->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
    QTableWidgetItem *minItem = new QTableWidgetItem(ui->pushButton_Min->text());
    minItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
    minItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    QTableWidgetItem *maxItem = new QTableWidgetItem(ui->pushButton_Max->text());
    maxItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
    maxItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    maxItem->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
    QTableWidgetItem *typeItem = new QTableWidgetItem(ui->comboBox_type->currentText());
    typeItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
    typeItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    typeItem->setTextColor(QColor(218, 218, 218)); // Replace Qt::red with any QColor of your choice.
    NowTable->setItem(row, 0, nameItem);
    NowTable->setItem(row, 1, valueItem);
    NowTable->setItem(row, 2, unitItem);
    NowTable->setItem(row, 3, minItem);
    NowTable->setItem(row, 4, maxItem);
    NowTable->setItem(row, 5, typeItem);
    NowTable->setItemDelegateForColumn(1,new ParEditDelegate(this));

    // 同步更新XML(这里简化处理,实际应用中需要更细致的错误处理)
//    updateXML(); // 定义这个函数来处理XML更新
}

void FactoryConfigWidget::ondelRowForTable()
{
    GetInfoFromTab();
    if(NowTable==nullptr) return;
    if (NowTable->rowCount() > 0)
    {
        int currentRow = NowTable->currentRow();
        if (currentRow >= 0)
        {
            NowTable->removeRow(currentRow);
            // 同步更新XML
//            updateXML(); // 调用更新XML的函数
        }
    }
    ui->labelMessage->setText("Del ok");
}

void FactoryConfigWidget::GetInfoFromTab(void)
{
    tablename=ui->tabWidget->tabText(ui->tabWidget->currentIndex());
    NowTable=getTable(tablename);
}

void FactoryConfigWidget::fileSendProcess()
{
    if(FileSendGetFrom485::createInstance().sendReceiveStatus()==FileComplete)
    {
        QString ftemp=ui->labelTitle->text();
        ftemp=ftemp.split(" ").at(0);
        //打开或创建文件
        QFile file(filename);
        //QIODevice::Truncate表示清空原来的内容
        if(!file.open(QFile::WriteOnly|QFile::Truncate))
        return ;

        QXmlStreamWriter writer(&file);
        writer.setAutoFormatting(true);//自动化格式
        writer.setCodec(QTextCodec::codecForUtfText("UTF-8"));
        writer.writeStartDocument("1.0", true); //开始文档(xml声明)

        writer.writeStartElement("FactoryCfg");//开始根元素
        writer.writeAttribute("Type",ftemp);
        for (int i = 0; i < tables.size(); ++i) {
            const auto& entry = tables[i];
            const QString& key = entry.first; // 获取键名,即QString部分
            QTableWidget* tableWidget = entry.second; // 获取值,即QTableWidget指针
            if(tableWidget->rowCount()==0) continue;//去除下面没有数据的tab节点
            writer.writeStartElement("Tab");
            writer.writeAttribute("Name", key);
            if(globalTab.contains(key))
            {
                writer.writeAttribute("global", "1");
            }
            int row = tableWidget->rowCount();
            for (int j = 0; j < row; ++j) {
                writer.writeStartElement("Parameter");
                writer.writeAttribute("Name", tableWidget->item(j, 0)->text());
                writer.writeAttribute("Value", tableWidget->item(j, 1)->text());
                writer.writeAttribute("Unit", tableWidget->item(j, 2)->text());
                writer.writeAttribute("Min", tableWidget->item(j, 3)->text());
                writer.writeAttribute("Max", tableWidget->item(j, 4)->text());
                writer.writeAttribute("Type", tableWidget->item(j, 5)->text());
                writer.writeEndElement(); // 结束子元素 Parameter
            }
            writer.writeEndElement(); // 结束根元素 Tab
        }
        writer.writeEndElement();//结束根元素
        writer.writeEndDocument();//结束文档
        file.close();
        ui->labelMessage->setText("Save ok");
    }
    else
    {
        ui->labelMessage->setText("Save fail");
    }
    NowTable->setEnabled(true);
    ui->pushButton_Save->setEnabled(true);
    ui->pushButton_close->setEnabled(true);
    m_timer.stop();
}

//QBasicAtomicInt qt_qhash_seed;//在文件开始加入这句
bool FactoryConfigWidget::SaveXmlandIni()
{
//    updateXML();
    QString ftemp=ui->labelTitle->text();
    ftemp=ftemp.split(" ").at(0);

    // 定义文件格式
    const QString suffix = ".ini";
    // 在inifile文件夹中新建一个ini文件,已filename命名
//    const QString m_inipath_temp = "./temp/x" + ftemp + suffix;
    m_inipath = "./temp/" + ftemp + suffix;
    QSettings *settings = new QSettings(m_inipath, QSettings::IniFormat);


    settings->beginGroup(ftemp);
    QStringList keylist;
    keylist.clear();
    for (const auto& entry : tables) {
        // 由于QList中的元素是QPair,直接解构获取QString和QTableWidget*
//        const QString& key = entry.first; // 获取键名,即QString部分
        QTableWidget* tableWidget = entry.second; // 获取值,即QTableWidget指针

        int row = tableWidget->rowCount();
        QString name,value;
        for(int j = 0; j < row; ++j) {
            // 以键值对的形式写入数据到settings
            name=tableWidget->item(j, 0)->text();
            value=tableWidget->item(j, 1)->text();
            if(!keylist.contains(name))
            {
                keylist.append(name);
                settings->setValue(name, value);
            }
            else
            {
                ui->labelMessage->setText("Par rep!");
                delete settings;
                qDebug() << "Failed to remove temp XML file.";
                return false;
            }
            // 注意:这里直接使用了item文本作为settings的键,确保这些键是唯一的,否则后面的值会覆盖前面的值。
        }
    }
    settings->endGroup();

    delete settings;
    // 尝试打开创建的ini文件
    QFile fileini(m_inipath);

    if(fileini.exists())  // 打开成功的提示
    {
        //QMessageBox::information(this, tr("提示 Tips"), tr("保存成功!Saving succeeded!"));
    }
    else  // 打开失败的提示
    {
        QMessageBox::information(this, tr("Tips"), tr("Saving failed!"));
        return false;
    }
    return true;
}


void FactoryConfigWidget::on_pushButton_close_clicked()
{
    close();
}


void FactoryConfigWidget::on_pushButton_Save_clicked()
{
//    if(m_sendStatus != FileSendIdle)
//        return;
    if(SaveXmlandIni() == false)
    {
        qDebug() << "Save xml error!";
        m_timer.stop();
    }
    else
    {
        if(NowTable==nullptr) return;
        if(FileSendGetFrom485::createInstance().sendFile(m_inipath,3)==1)
        {
            NowTable->setEnabled(false);
            ui->pushButton_Save->setEnabled(false);
            ui->pushButton_close->setEnabled(false);
            m_timer.start(3000);
        }
        else
        {
            ui->labelMessage->setText("Save fail");
        }
    }

}

void FactoryConfigWidget::on_pushButton_Super_clicked()
{
    if(m_superMode==false)
    {
        InputDialog::getInstance()->setEditMode(InputDialog::EditPassword);
        InputDialog::getInstance()->setTitle(tr("Please input password"));
        InputDialog::getInstance()->setEditMode(InputDialog::EditNormal);
        int ret = InputDialog::getInstance()->exec();
        if (ret == QDialog::Accepted) {
            QString str = InputDialog::getInstance()->getInputString();
//            if (str == "20211003") {
                m_superMode=1;
                ui->pushButton_Super->setText("S.ON");
                ui->pushButton_add->setEnabled(true);
                ui->pushButton_del->setEnabled(true);
                ui->pushButton_NewTab->setEnabled(true);
                ui->pushButton_Name->setEnabled(true);
                ui->pushButton_Value->setEnabled(true);
                ui->pushButton_Unit->setEnabled(true);
                ui->pushButton_Min->setEnabled(true);
                ui->pushButton_Max->setEnabled(true);
                ui->comboBox_type->setEnabled(true);
//            }
        }
    }
    else
    {
        ui->pushButton_Super->setText("S.OFF");
        ui->pushButton_add->setEnabled(false);
        ui->pushButton_del->setEnabled(false);
        ui->pushButton_NewTab->setEnabled(false);
        ui->pushButton_Name->setEnabled(false);
        ui->pushButton_Value->setEnabled(false);
        ui->pushButton_Unit->setEnabled(false);
        ui->pushButton_Min->setEnabled(false);
        ui->pushButton_Max->setEnabled(false);
        ui->comboBox_type->setEnabled(false);
        m_superMode=false;
    }
}

QString FactoryConfigWidget::Inputfuc(QString buttonName)
{
    QString str;
    str.clear();
    InputDialog::getInstance()->setEditMode(InputDialog::EditPassword);
    InputDialog::getInstance()->setTitle(buttonName+" input");
    InputDialog::getInstance()->setEditMode(InputDialog::EditNormal);
    int ret = InputDialog::getInstance()->exec();
    if (ret == QDialog::Accepted) {
        str = InputDialog::getInstance()->getInputString();

    }
    return str;
}

void FactoryConfigWidget::on_pushButton_Name_clicked()
{
    ui->pushButton_Name->setText(Inputfuc("Name"));
}

void FactoryConfigWidget::on_pushButton_Value_clicked()
{
    ui->pushButton_Value->setText(Inputfuc("Value"));
}

void FactoryConfigWidget::on_pushButton_Unit_clicked()
{
    ui->pushButton_Unit->setText(Inputfuc("Unit"));
}

void FactoryConfigWidget::on_pushButton_Min_clicked()
{
    ui->pushButton_Min->setText(Inputfuc("Min"));
}

void FactoryConfigWidget::on_pushButton_Max_clicked()
{
    ui->pushButton_Max->setText(Inputfuc("Max"));
}

void FactoryConfigWidget::on_comboBox_type_currentIndexChanged(const QString &arg1)
{
    if(arg1=="bool")
    {
        ui->pushButton_Unit->setText("");
        ui->pushButton_Unit->setDisabled(true);
        ui->pushButton_Min->setText("0");
        ui->pushButton_Min->setDisabled(true);
        ui->pushButton_Max->setText("1");
        ui->pushButton_Max->setDisabled(true);
    }
    else
    {
        ui->pushButton_Unit->setText("");
        ui->pushButton_Min->setText("");
        ui->pushButton_Max->setText("");
        ui->pushButton_Unit->setDisabled(false);
        ui->pushButton_Min->setDisabled(false);
        ui->pushButton_Max->setDisabled(false);
    }
}


void FactoryConfigWidget::on_pushButton_NewTab_clicked()
{
    QString newTabText = Inputfuc("Add new tab");
    if(!newTabText.isEmpty())
    {
        QTableWidget *table = new QTableWidget(ui->tabWidget);
        ui->tabWidget->addTab(table, newTabText);
        tables.append(qMakePair(newTabText, table)); // 添加到列表
        table->setColumnCount(6);
        table->setHorizontalHeaderLabels({"Name", "Value", "Unit", "Min", "Max", "Type"});
        table->setColumnWidth(0,180);
        QHeaderView *headerView = table->horizontalHeader();
        headerView->setSectionResizeMode(0, QHeaderView::Fixed); // 第一列适应内容
        headerView->setSectionResizeMode(1, QHeaderView::Stretch); // 第2列拉伸填充
        headerView->setSectionResizeMode(2, QHeaderView::Stretch); // 第3列拉伸填充
        headerView->setSectionResizeMode(3, QHeaderView::Stretch); // 第4列拉伸填充
        headerView->setSectionResizeMode(4, QHeaderView::Stretch); // 第5列拉伸填充
        headerView->setSectionResizeMode(5, QHeaderView::Stretch); // 第6列拉伸填充
        table->setColumnHidden(5, true);
        table->setItemDelegateForColumn(1,new ParEditDelegate(this));
    }
}

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值