Files
EJM_Display/Pages/P12_NetworkPage.cpp
2025-10-16 17:40:00 +08:00

276 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "P12_NetworkPage.h"
#include "ui_P12_NetworkPage.h"
#include <QPropertyAnimation>
#include <QLabel>
#include <QPixmap>
#include <QVBoxLayout>
#include <QTabWidget>
#include <QFileInfo>
#include <QPushButton>
class ReadOnlyItem : public QTableWidgetItem
{
public:
explicit ReadOnlyItem(const QString &text)
: QTableWidgetItem(text)
{
setFlags(flags() & ~Qt::ItemIsEditable); // 去掉可编辑标志
}
};
P12_NetworkPage::P12_NetworkPage(QWidget *parent) :
QWidget(parent),
ui(new Ui::P12_NetworkPage)
{
ui->setupUi(this);
QTimer::singleShot(10, this, &P12_NetworkPage::WinInit);
}
P12_NetworkPage::~P12_NetworkPage()
{
delete ui;
}
void P12_NetworkPage::WinInit()
{
ui->MainWidget->setCurrentIndex(0);
gPageIndexStr12 = "P12.0";
for (uint8_t i=0;i<9;i++) {
QString FileName = QString("画面配置/UI_IO扩展页面%1_配置.csv").arg(i+1);
QString TableWidgetObjName = QString("TableWidget_PLC_%1").arg(i+1);
mCsvConfig[i].FileName = ConfigurationPath + FileName;
QFileInfo checkFile(mCsvConfig[i].FileName);
if (checkFile.exists() && checkFile.isFile()) {
QTableWidget* TableWidget = findChild<QTableWidget*>(TableWidgetObjName);
if(TableWidget)
TableViewInit(TableWidget,&mCsvConfig[i]);
}
//gPageName["P12.0"])
QPushButton* Button = findChild<QPushButton*>(QString("But_Network_%1").arg(i));
if(Button){
Button->setText(gPageName["P12."+QString::number(i)]);
}
}
// mCsvConfig[0].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面1_配置.csv";
// mCsvConfig[1].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面2_配置.csv";
// mCsvConfig[2].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面3_配置.csv";
// mCsvConfig[3].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面4_配置.csv";
// mCsvConfig[4].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面5_配置.csv";
// mCsvConfig[5].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面6_配置.csv";
// mCsvConfig[6].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面7_配置.csv";
// mCsvConfig[7].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面8_配置.csv";
// mCsvConfig[8].FileName = ConfigurationPath + "画面配置/UI_IO扩展页面9_配置.csv";
// TableViewInit(ui->TableWidget_PLC_1,&mCsvConfig[0]);
// TableViewInit(ui->TableWidget_PLC_2,&mCsvConfig[1]);
// TableViewInit(ui->TableWidget_PLC_3,&mCsvConfig[2]);
//所用定时器初始化
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+48]));
tw->setItem(i,13,new ReadOnlyItem(CCT->ShowText[i+48]));
}
}
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] == "数值"){
if(CCT->DataNode[Index] == "Q_OilCylindShorten.TrackR.OutPWM")
qDebug()<<getNodeValue(CCT->DataNode[Index])<<variantToFormattedString(getNodeValue(CCT->DataNode[Index]), 2);
auto *item = new ReadOnlyItem(variantToFormattedString(getNodeValue(CCT->DataNode[Index]), 2));
item->setForeground(QBrush(getColor(CCT->TColor[Index])));
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
tw->setItem(i, 2 + j * 4, item);
}else if(CCT->Type[Index] != ""){
if(CCT->DataNode[Index].contains("#")){
QList<QString> NodeId = CCT->DataNode[Index].split("#");
bool TmpBool = getBitOf32Data(getNodeValue(NodeId[0]).toUInt(),NodeId[1].toInt());
tw->setItem(i,2+j*4,makeColorItem(CCT->Type[Index],TmpBool,CCT->FColor[Index],CCT->TColor[Index]));
}
}
}
}
}
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?getColor(TFcolor):getColor(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(!gPageIndexStr.contains("P12"))
return;
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:TableViewDataUpdate(ui->TableWidget_PLC_4,&mCsvConfig[3]);break;
case 5:TableViewDataUpdate(ui->TableWidget_PLC_5,&mCsvConfig[4]);break;
case 6:TableViewDataUpdate(ui->TableWidget_PLC_6,&mCsvConfig[5]);break;
case 7:TableViewDataUpdate(ui->TableWidget_PLC_7,&mCsvConfig[6]);break;
case 8:TableViewDataUpdate(ui->TableWidget_PLC_8,&mCsvConfig[7]);break;
// case 9:TableViewDataUpdate(ui->TableWidget_PLC_9,&mCsvConfig[8]);break;
}
}
void P12_NetworkPage::on_But_Network_0_clicked(){ slideToIndex(0, "P12.0");}
void P12_NetworkPage::on_But_Network_1_clicked(){ slideToIndex(1, "P12.1");}
void P12_NetworkPage::on_But_Network_2_clicked(){ slideToIndex(2, "P12.2");}
void P12_NetworkPage::on_But_Network_3_clicked(){ slideToIndex(3, "P12.3");}
void P12_NetworkPage::on_But_Network_4_clicked(){ slideToIndex(4, "P12.4");}
void P12_NetworkPage::on_But_Network_5_clicked(){ slideToIndex(5, "P12.5");}
void P12_NetworkPage::on_But_Network_6_clicked(){ slideToIndex(6, "P12.6");}
void P12_NetworkPage::on_But_Network_7_clicked(){ slideToIndex(7, "P12.7");}
void P12_NetworkPage::on_But_Network_8_clicked(){ slideToIndex(8, "P12.8");}
void P12_NetworkPage::on_But_Network_9_clicked(){ slideToIndex(9, "P12.9");}
void P12_NetworkPage::on_MainWidget_currentChanged(int arg1)
{
}
void P12_NetworkPage::slideToIndex(int newIndex, QString PageName)
{
gPageIndexStr = PageName;
gPageIndexStr12 = PageName;
int direction =0;
uint8_t OldIndex = ui->MainWidget->currentIndex();
if (newIndex == OldIndex) return;
if(newIndex > OldIndex) direction = 1;
else direction = -1;
int oldIndex = ui->MainWidget->currentIndex();
QWidget *currentWidget = ui->MainWidget->widget(oldIndex);
QWidget *nextWidget = ui->MainWidget->widget(newIndex);
if (!currentWidget || !nextWidget) return;
// 1. 截图
QPixmap currentPx(currentWidget->size());
currentWidget->render(&currentPx);
QPixmap nextPx(nextWidget->size());
nextWidget->render(&nextPx);
// 2. 临时层
QWidget *overlay = new QWidget(this);
overlay->setGeometry(ui->MainWidget->geometry());
overlay->setStyleSheet("background: transparent;");
QLabel *oldLabel = new QLabel(overlay);
oldLabel->setPixmap(currentPx);
oldLabel->setFixedSize(currentWidget->size());
QLabel *newLabel = new QLabel(overlay);
newLabel->setPixmap(nextPx);
newLabel->setFixedSize(nextWidget->size());
newLabel->move(direction * currentWidget->width(), 0);
overlay->raise();
overlay->show();
// 3. 动画
int dx = currentWidget->width();
QPropertyAnimation *animOld = new QPropertyAnimation(oldLabel, "pos");
animOld->setDuration(300);
animOld->setStartValue(QPoint(0, 0));
animOld->setEndValue(QPoint(-direction * dx, 0));
QPropertyAnimation *animNew = new QPropertyAnimation(newLabel, "pos");
animNew->setDuration(300);
animNew->setStartValue(QPoint(direction * dx, 0));
animNew->setEndValue(QPoint(0, 0));
connect(animNew, &QPropertyAnimation::finished, this, [=]() {
ui->MainWidget->setCurrentIndex(newIndex);
overlay->deleteLater();
});
animOld->start(QAbstractAnimation::DeleteWhenStopped);
animNew->start(QAbstractAnimation::DeleteWhenStopped);
}