DYTSrouce/src/ui/Table/targetlistwgt.cpp
2025-10-16 16:35:57 +08:00

233 lines
5.9 KiB
C++

#include "targetlistwgt.h"
#include <QFile>
#include <QToolButton>
#include <QCheckBox>
#include <QHBoxLayout>
#include <QDateTime>
#include <QMenu>
#include <QDebug>
#include <QFileInfo>
#include <windows.h>
#include <windowsx.h>
#include "../DockTitleBar.h"
#include "../DockWidget.h"
#include <QMessageBox>
#include "common/SpdLogger.h"
#include "workspace/WorkSpace.h"
#include "workspace/Timestep.h"
#include "workspace/WorkSpaceManager.h"
TargetListWgt::TargetListWgt(QWidget * parent) : QWidget(parent) {
ui.setupUi(this);
setWindowTitle(QString::fromLocal8Bit("数据列表"));
setWindowFlags(/*Qt::FramelessWindowHint | */Qt::Window);
QHeaderView* horizontalHeader = ui.tableWidget->horizontalHeader();
QColor headerColor = QColor(100, 100, 100); // 灰色
horizontalHeader->setStyleSheet(QString("QHeaderView::section {background-color: %1;}").arg(headerColor.name()));
horizontalHeader->setStretchLastSection(true);
InitWgt();
connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, this, &TargetListWgt::OnWorkSpaceChanged);
}
TargetListWgt::~TargetListWgt() {
}
void TargetListWgt::AttachDock(DockWidget* dockWidget)
{
if (nullptr == dockWidget) {
qDebug() << __FUNCTION__ << "dockwidget is nullptr";
return;
}
dockWidget->SetDockWidgetTitleBar(nullptr);
dockWidget->setWidget(this);
DockTitleBar* dockTitleBar = new DockTitleBar;
m_pDockTitleBar = dockTitleBar;
dockWidget->SetDockWidgetTitleBar(dockTitleBar);
}
void TargetListWgt::updateTitle(const QString & title)
{
if (nullptr != m_pDockTitleBar)
{
m_pDockTitleBar->SetTitle(title);
}
}
void TargetListWgt::SetHead(const QString & headers)
{
QStringList headerLabels = headers.split(",");
SetHeader(headerLabels);
}
void TargetListWgt::SetHeader(const QStringList& headerLabels)
{
ui.tableWidget->clear();
ui.tableWidget->setColumnCount(headerLabels.size());
ui.tableWidget->setHorizontalHeaderLabels(headerLabels);
}
void TargetListWgt::updateParseFile(const QString & strFile, int nT, QVariantList listCurve)
{
if (strFile.isEmpty())
{
QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("请检查数据文件路径!"));
return;
}
QFile file(strFile);
if (file.open(QIODevice::ReadOnly))
{
for (int nI = 0; nI < listCurve.size(); nI++)
{
QVariantMap mapCurve = listCurve.at(nI).toMap();
QString strName = mapCurve.value("Name").toString();
QString strColor = mapCurve.value("Color").toString();
m_tableSetting.insert(nI, mapCurve);
}
while (!file.atEnd())
{
QString strLine = file.readLine().simplified();
if (!strLine.isEmpty())
{
QStringList listLine = strLine.split(" ");
double t = listLine.at(nT).toDouble();
QMap<int, QVariantList> mapData;
for (int nI = 0; nI < listCurve.size(); nI++)
{
QVariantMap mapCurve = listCurve.at(nI).toMap();
QString strData = mapCurve.value("Data").toString();
QStringList listData = strData.split(",");
QVariantList varList;
for (int nJ = 0; nJ < listData.size(); nJ++)
{
int nIndex = listData.at(nJ).toInt();
double data = listLine.at(nIndex).toDouble();
varList.push_back(data);
}
mapData.insert(nI, varList);
}
m_dataTable.insert(t, mapData);
}
}
file.close();
}
}
void TargetListWgt::InitWgt()
{
ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
//ui.tableWidget->setSortingEnabled(true);
connect(ui.tableWidget, SIGNAL( itemDoubleClicked (QTableWidgetItem *)),
this, SLOT(slotDoubleClickedItem(QTableWidgetItem *)));
connect(ui.tableWidget, SIGNAL(itemClicked(QTableWidgetItem *)),
this, SLOT(slotClickedItem(QTableWidgetItem *)));
//connect(ui.tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int)), this, SLOT(slotSortTabCol(int)));
}
void TargetListWgt::slotSortTabCol(int nCol)
{
QHeaderView *pSender = (QHeaderView *)(sender());
QTableWidget *pParen = (QTableWidget *)(pSender->parent());
pParen->sortItems(nCol, Qt::DescendingOrder);
//pParen->sortItems(nCol, Qt::AscendingOrder);
}
void TargetListWgt::OnWorkSpaceChanged(WorkSpace* worksapce) {
if (worksapce == nullptr) {
LOG_ERROR("worksapce is nullptr");
return;
}
connect(worksapce, &WorkSpace::TimestepChanged, this, &TargetListWgt::OnTimestepChanged);
}
void TargetListWgt::OnTimestepChanged(Timestep* timestep) {
if (timestep == nullptr) {
LOG_ERROR("timestep is nullptr");
return;
}
connect(timestep, SIGNAL(TimeChanged(double)), this, SLOT(slotUpdateTime(double)));
}
void TargetListWgt::slotUpdateTime(double dTime)
{
UpdateTable(dTime);
}
void TargetListWgt::slotDoubleClickedItem(QTableWidgetItem *pItem)
{
QTableWidget *pSender = (QTableWidget *)sender();
}
void TargetListWgt::slotClickedItem(QTableWidgetItem *pItem)
{
QTableWidget *pSender = (QTableWidget *)sender();
}
void TargetListWgt::timerEvent(QTimerEvent *event)
{
}
void TargetListWgt::UpdateTable(double t)
{
if (m_dataTable.size() > 0)
{
clearTable();
QMap< double, QMap<int, QVariantList> >::const_iterator ite = m_dataTable.lowerBound(t);
if (ite == m_dataTable.end())
{
ite--;
}
QMap<int, QVariantList> mapData = ite.value();
for (QMap<int, QVariantList>::Iterator it = mapData.begin(); it != mapData.end(); it++)
{
int nRow = it.key();
QVariantList dataList = it.value();
ui.tableWidget->insertRow(nRow);
for (int nI = 0; nI < dataList.size(); nI++)
{
QString strVal;
strVal.sprintf("%.6f", dataList.at(nI).toFloat());
QTableWidgetItem *item = new QTableWidgetItem(strVal);
item->setTextAlignment(Qt::AlignCenter);
ui.tableWidget->setItem(nRow, nI, item);
}
}
}
}
void TargetListWgt::clearTable()
{
int nCount = ui.tableWidget->rowCount();
for (int nI = 0; nI < nCount; )
{
ui.tableWidget->removeRow(0);
nCount = ui.tableWidget->rowCount();
}
}