2025-08-20 23:06:28 +08:00
|
|
|
|
#include "P12_NetworkPage.h"
|
|
|
|
|
|
#include "ui_P12_NetworkPage.h"
|
|
|
|
|
|
|
2025-09-15 22:28:43 +08:00
|
|
|
|
|
|
|
|
|
|
class ReadOnlyItem : public QTableWidgetItem
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
explicit ReadOnlyItem(const QString &text)
|
|
|
|
|
|
: QTableWidgetItem(text)
|
|
|
|
|
|
{
|
|
|
|
|
|
setFlags(flags() & ~Qt::ItemIsEditable); // 去掉可编辑标志
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-08-20 23:06:28 +08:00
|
|
|
|
P12_NetworkPage::P12_NetworkPage(QWidget *parent) :
|
|
|
|
|
|
QWidget(parent),
|
|
|
|
|
|
ui(new Ui::P12_NetworkPage)
|
|
|
|
|
|
{
|
|
|
|
|
|
ui->setupUi(this);
|
2025-09-15 22:28:43 +08:00
|
|
|
|
WinInit();
|
|
|
|
|
|
ui->MainWidget->setCurrentIndex(0);
|
|
|
|
|
|
gPageIndexStr = "P12.00";
|
|
|
|
|
|
mCsvConfig[0].FileName = "./ProgramConfig/UI_IO扩展页面1_配置.csv";
|
|
|
|
|
|
mCsvConfig[1].FileName = "./ProgramConfig/UI_IO扩展页面2_配置.csv";
|
|
|
|
|
|
mCsvConfig[2].FileName = "./ProgramConfig/UI_IO扩展页面3_配置.csv";
|
|
|
|
|
|
|
|
|
|
|
|
TableViewInit(ui->TableWidget_PLC_1,&mCsvConfig[0]);
|
|
|
|
|
|
TableViewInit(ui->TableWidget_PLC_2,&mCsvConfig[1]);
|
|
|
|
|
|
TableViewInit(ui->TableWidget_PLC_3,&mCsvConfig[2]);
|
|
|
|
|
|
// 2. 向模型添加数据
|
|
|
|
|
|
// ModelPage1->setItem(0, 0, new QStandardItem("张三"));
|
|
|
|
|
|
// ModelPage1->setItem(0, 1, new QStandardItem("25"));
|
|
|
|
|
|
// ModelPage1->setItem(1, 0, new QStandardItem("李四"));
|
|
|
|
|
|
// ModelPage1->setItem(1, 1, new QStandardItem("30"));
|
|
|
|
|
|
// ModelPage1->setItem(2, 0, new QStandardItem("王五"));
|
|
|
|
|
|
// ModelPage1->setItem(2, 1, new QStandardItem("28"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-20 23:06:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
P12_NetworkPage::~P12_NetworkPage()
|
|
|
|
|
|
{
|
|
|
|
|
|
delete ui;
|
|
|
|
|
|
}
|
2025-09-15 22:28:43 +08:00
|
|
|
|
void P12_NetworkPage::WinInit()
|
|
|
|
|
|
{
|
|
|
|
|
|
//所用定时器初始化
|
|
|
|
|
|
QTimer* UIRefresh_Timer = new QTimer(this);
|
|
|
|
|
|
connect(UIRefresh_Timer, &QTimer::timeout, this, &P12_NetworkPage::UIRefreshTimeOut);
|
|
|
|
|
|
UIRefresh_Timer->setInterval(100); // 设置定时器间隔为 1000 毫秒(1 秒)
|
|
|
|
|
|
UIRefresh_Timer->start();
|
|
|
|
|
|
}
|
|
|
|
|
|
void P12_NetworkPage::TableViewInit( QTableWidget *tw,tsCsvConfigText *CCT){
|
|
|
|
|
|
tw->move(2,5);
|
|
|
|
|
|
tw->setSizeIncrement(1023,512);
|
|
|
|
|
|
tw->setRowCount(16);
|
|
|
|
|
|
tw->setColumnCount(15);
|
|
|
|
|
|
tw->horizontalHeader()->setVisible(false);
|
|
|
|
|
|
tw->verticalHeader()->setVisible(false);
|
|
|
|
|
|
tw->horizontalHeader()->setMinimumSectionSize(0);
|
|
|
|
|
|
for (uint8_t i=0; i<16;i++) {
|
|
|
|
|
|
tw->setRowHeight(i,32);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (int i=0;i<4;i++) {
|
|
|
|
|
|
qDebug()<<0+i*4<<1+i*4<<2+i*4<<3+i*4;
|
|
|
|
|
|
tw->setColumnWidth(0+i*4, 42); // 60+200+10+
|
|
|
|
|
|
tw->setColumnWidth(1+i*4, 150);
|
|
|
|
|
|
tw->setColumnWidth(2+i*4, 60);
|
|
|
|
|
|
if(3+i*4<15)
|
|
|
|
|
|
tw->setColumnWidth(3+i*4, 4);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QList<QStringList> FileData = ConfigFiles().ReadFile_Csv(CCT->FileName);
|
|
|
|
|
|
|
|
|
|
|
|
for (int row = 1; row < FileData.size()-1; ++row)
|
|
|
|
|
|
{
|
|
|
|
|
|
CCT->Type.append(FileData.at(row)[1]);
|
|
|
|
|
|
CCT->PinName.append(FileData.at(row)[2]);
|
|
|
|
|
|
QString Text = FileData.at(row)[3];
|
|
|
|
|
|
Text.replace("\\n","\n",Qt::CaseInsensitive);
|
|
|
|
|
|
CCT->ShowText.append(Text);
|
|
|
|
|
|
CCT->TColor.append(FileData.at(row)[4]);
|
|
|
|
|
|
CCT->FColor.append(FileData.at(row)[5]);
|
|
|
|
|
|
CCT->DataNode.append(FileData.at(row)[6]);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (uint8_t i=0;i<16;i++) {
|
|
|
|
|
|
tw->setItem(i,0,new ReadOnlyItem(CCT->PinName[i]));
|
|
|
|
|
|
tw->setItem(i,1,new ReadOnlyItem(CCT->ShowText[i]));
|
|
|
|
|
|
|
|
|
|
|
|
tw->setItem(i,4,new ReadOnlyItem(CCT->PinName[i+16]));
|
|
|
|
|
|
tw->setItem(i,5,new ReadOnlyItem(CCT->ShowText[i+16]));
|
|
|
|
|
|
|
|
|
|
|
|
tw->setItem(i,8,new ReadOnlyItem(CCT->PinName[i+32]));
|
|
|
|
|
|
tw->setItem(i,9,new ReadOnlyItem(CCT->ShowText[i+32]));
|
|
|
|
|
|
|
|
|
|
|
|
tw->setItem(i,12,new ReadOnlyItem(CCT->PinName[i+32]));
|
|
|
|
|
|
tw->setItem(i,13,new ReadOnlyItem(CCT->ShowText[i+32]));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
void P12_NetworkPage::TableViewDataUpdate( QTableWidget *tw,tsCsvConfigText *CCT){
|
|
|
|
|
|
for (uint8_t i=0;i<16;i++) {
|
|
|
|
|
|
for (uint8_t j=0;j<4;j++) {
|
|
|
|
|
|
uint8_t Index = i+j*16;
|
|
|
|
|
|
if(CCT->Type[Index] == "数值"){
|
|
|
|
|
|
tw->setItem(i,2+j*4,new ReadOnlyItem(variantToFormattedString(gOPC_NodeValue[CCT->DataNode[Index]],2)));
|
|
|
|
|
|
}else if(CCT->Type[Index] != ""){
|
|
|
|
|
|
QList<QString> NodeId = CCT->DataNode[Index].split("#");
|
|
|
|
|
|
bool TmpBool = getBitOf32Data(gOPC_NodeValue[NodeId[0]].toUInt(),NodeId[1].toInt());
|
|
|
|
|
|
tw->setItem(i,2+j*4,makeColorItem(CCT->Type[Index],TmpBool,CCT->FColor[Index],CCT->TColor[Index]));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
inline QColor parseCssColor(const QString &css)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 从 "color: rgb(r, g, b);" 或 "rgb(r, g, b)" 里抠出 r,g,b
|
|
|
|
|
|
static QRegularExpression re(R"(rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))");
|
|
|
|
|
|
auto m = re.match(css);
|
|
|
|
|
|
if (m.hasMatch())
|
|
|
|
|
|
return QColor(m.captured(1).toInt(),
|
|
|
|
|
|
m.captured(2).toInt(),
|
|
|
|
|
|
m.captured(3).toInt());
|
|
|
|
|
|
return Qt::black; // 兜底
|
|
|
|
|
|
}
|
|
|
|
|
|
inline QTableWidgetItem *P12_NetworkPage::makeColorItem(const QString &Type,
|
|
|
|
|
|
const bool Color,
|
|
|
|
|
|
const QString &Fcolor,
|
|
|
|
|
|
const QString &TFcolor,
|
|
|
|
|
|
bool editable)
|
|
|
|
|
|
{
|
|
|
|
|
|
QColor c;
|
|
|
|
|
|
QString text;
|
|
|
|
|
|
c = Color?parseCssColor(TFcolor):parseCssColor(Fcolor);
|
|
|
|
|
|
|
|
|
|
|
|
if(Type == "输入")
|
|
|
|
|
|
text = "●";
|
|
|
|
|
|
else if(Type == "输出")
|
|
|
|
|
|
text = "■";
|
|
|
|
|
|
else
|
|
|
|
|
|
text = "★";
|
|
|
|
|
|
QTableWidgetItem *item = new QTableWidgetItem(text);
|
|
|
|
|
|
item->setForeground(QBrush(c));
|
|
|
|
|
|
item->setTextAlignment(Qt::AlignCenter); // 居中
|
|
|
|
|
|
QFont f = item->font();
|
|
|
|
|
|
f.setPointSize(20);
|
|
|
|
|
|
item->setFont(f);
|
|
|
|
|
|
if (!editable)
|
|
|
|
|
|
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
|
|
|
|
|
|
|
|
|
|
|
|
return item;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page0(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page1(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page2(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page3(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page4(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page5(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page6(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page7(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page8(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefresh_Page9(){}
|
|
|
|
|
|
void P12_NetworkPage::UIRefreshTimeOut()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(this->isHidden())
|
|
|
|
|
|
return;
|
|
|
|
|
|
gPageIndexStr = "P12.0" + QString::number(ui->MainWidget->currentIndex());
|
|
|
|
|
|
switch (ui->MainWidget->currentIndex()) {
|
|
|
|
|
|
case 0:UIRefresh_Page0();break;
|
|
|
|
|
|
case 1:TableViewDataUpdate(ui->TableWidget_PLC_1,&mCsvConfig[0]);break;
|
|
|
|
|
|
case 2:TableViewDataUpdate(ui->TableWidget_PLC_2,&mCsvConfig[1]);break;
|
|
|
|
|
|
case 3:TableViewDataUpdate(ui->TableWidget_PLC_3,&mCsvConfig[2]);break;
|
|
|
|
|
|
case 4:UIRefresh_Page4();break;
|
|
|
|
|
|
case 5:UIRefresh_Page5();break;
|
|
|
|
|
|
case 6:UIRefresh_Page6();break;
|
|
|
|
|
|
case 7:UIRefresh_Page7();break;
|
|
|
|
|
|
case 8:UIRefresh_Page8();break;
|
|
|
|
|
|
case 9:UIRefresh_Page9();break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_0_clicked(){ ui->MainWidget->setCurrentIndex(0);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_1_clicked(){ ui->MainWidget->setCurrentIndex(1);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_2_clicked(){ ui->MainWidget->setCurrentIndex(2);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_3_clicked(){ ui->MainWidget->setCurrentIndex(3);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_4_clicked(){ ui->MainWidget->setCurrentIndex(4);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_5_clicked(){ ui->MainWidget->setCurrentIndex(5);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_6_clicked(){ ui->MainWidget->setCurrentIndex(6);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_7_clicked(){ ui->MainWidget->setCurrentIndex(7);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_8_clicked(){ ui->MainWidget->setCurrentIndex(8);}
|
|
|
|
|
|
void P12_NetworkPage::on_But_Network_9_clicked(){ ui->MainWidget->setCurrentIndex(9);}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void P12_NetworkPage::on_MainWidget_currentChanged(int arg1)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|