#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> ¶ms);
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> ¶ms = 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> ¶ms)
{
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 ¶m : 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));
}
}