feat:增加dataPanel的数据配置模块

This commit is contained in:
duanshengchao 2025-07-04 17:48:57 +08:00
parent 74de096ec5
commit 41b617ad94
5 changed files with 58 additions and 11 deletions

View File

@ -4,6 +4,7 @@
#include "global.h" #include "global.h"
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QRegularExpressionValidator> #include <QRegularExpressionValidator>
#include <QTimer>
dpConfigurationDialog::dpConfigurationDialog(QWidget *parent) dpConfigurationDialog::dpConfigurationDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent)
@ -109,10 +110,10 @@ void dpConfigurationDialog::initialize()
QRegularExpression regExp_ip("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}" QRegularExpression regExp_ip("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}"
"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"); "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
QRegularExpressionValidator* validator_ip = new QRegularExpressionValidator(regExp_ip, this); QRegularExpressionValidator* validator_ip = new QRegularExpressionValidator(regExp_ip, this);
ui->serverIP->setValidator(validator_ip); ui->serviceIP->setValidator(validator_ip);
QRegularExpression regExp_port("^(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$"); QRegularExpression regExp_port("^(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
QRegularExpressionValidator* validator_port = new QRegularExpressionValidator(regExp_port, this); QRegularExpressionValidator* validator_port = new QRegularExpressionValidator(regExp_port, this);
ui->serverPort->setValidator(validator_port); ui->servicePort->setValidator(validator_port);
} }
void dpConfigurationDialog::copyModelData(QStandardItemModel* sourceModel, QStandardItemModel* destModel) void dpConfigurationDialog::copyModelData(QStandardItemModel* sourceModel, QStandardItemModel* destModel)
@ -161,7 +162,7 @@ void dpConfigurationDialog::createDataSourceList()
stationItem->appendRow(componentItem); stationItem->appendRow(componentItem);
QStandardItem* currentItem = new QStandardItem("电流"); QStandardItem* currentItem = new QStandardItem("电流");
currentItem->setEditable(false); currentItem->setEditable(false);
currentItem->setData("point", Qt::UserRole + itemRole_tag); currentItem->setData("current", Qt::UserRole + itemRole_tag);
currentItem->setData(0, Qt::UserRole + itemRole_stationID); currentItem->setData(0, Qt::UserRole + itemRole_stationID);
currentItem->setData(0, Qt::UserRole + itemRole_componentID); currentItem->setData(0, Qt::UserRole + itemRole_componentID);
currentItem->setData(0, Qt::UserRole + itemRole_pointID); currentItem->setData(0, Qt::UserRole + itemRole_pointID);
@ -169,12 +170,20 @@ void dpConfigurationDialog::createDataSourceList()
componentItem->appendRow(currentItem); componentItem->appendRow(currentItem);
QStandardItem* voltageItem = new QStandardItem("电压"); QStandardItem* voltageItem = new QStandardItem("电压");
voltageItem->setEditable(false); voltageItem->setEditable(false);
voltageItem->setData("point", Qt::UserRole + itemRole_tag); voltageItem->setData("voltage", Qt::UserRole + itemRole_tag);
voltageItem->setData(0, Qt::UserRole + itemRole_stationID); voltageItem->setData(0, Qt::UserRole + itemRole_stationID);
voltageItem->setData(0, Qt::UserRole + itemRole_componentID); voltageItem->setData(0, Qt::UserRole + itemRole_componentID);
voltageItem->setData(1, Qt::UserRole + itemRole_pointID); voltageItem->setData(1, Qt::UserRole + itemRole_pointID);
voltageItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType); voltageItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType);
componentItem->appendRow(voltageItem); componentItem->appendRow(voltageItem);
QStandardItem* powerItem = new QStandardItem("功率");
powerItem->setEditable(false);
powerItem->setData("power", Qt::UserRole + itemRole_tag);
powerItem->setData(0, Qt::UserRole + itemRole_stationID);
powerItem->setData(0, Qt::UserRole + itemRole_componentID);
powerItem->setData(2, Qt::UserRole + itemRole_pointID);
powerItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType);
componentItem->appendRow(powerItem);
ui->dataSourceList->expandAll(); ui->dataSourceList->expandAll();
} }
@ -186,6 +195,8 @@ void dpConfigurationDialog::setPanel(DataPanel* pPanel)
// m_pModel_typeSelected = pPanel->m_cofigurationResults.m_pModel_dataType; // m_pModel_typeSelected = pPanel->m_cofigurationResults.m_pModel_dataType;
// if(m_pModel_typeSelected) // if(m_pModel_typeSelected)
// ui->typeSelectedList->setModel(m_pModel_typeSelected); // ui->typeSelectedList->setModel(m_pModel_typeSelected);
ui->serviceIP->setText(pPanel->m_cofigurationResults.dataServiceIP);
ui->servicePort->setText(QString::number(pPanel->m_cofigurationResults.dataServicePort));
} }
void dpConfigurationDialog::onBtnClicked_tabBtn() void dpConfigurationDialog::onBtnClicked_tabBtn()
@ -243,8 +254,10 @@ void dpConfigurationDialog::onBtnClicked_confirm()
{ {
//m_pDataPanel->m_cofigurationResults.m_pModel_dataType = m_pModel_typeSelected; //m_pDataPanel->m_cofigurationResults.m_pModel_dataType = m_pModel_typeSelected;
copyModelData(m_pModel_typeSelected, m_pDataPanel->m_cofigurationResults.m_pModel_dataType); copyModelData(m_pModel_typeSelected, m_pDataPanel->m_cofigurationResults.m_pModel_dataType);
m_pDataPanel->configurationComplete(); //m_pDataPanel->configurationComplete();
copyModelData(m_pModel_dataSelected, m_pDataPanel->m_cofigurationResults.m_pModel_dataSource); copyModelData(m_pModel_dataSelected, m_pDataPanel->m_cofigurationResults.m_pModel_dataSource);
m_pDataPanel->m_cofigurationResults.dataServiceIP = ui->serviceIP->text();
m_pDataPanel->m_cofigurationResults.dataServicePort = ui->servicePort->text().toInt();
m_pDataPanel->configurationComplete(); m_pDataPanel->configurationComplete();
} }
} }
@ -273,6 +286,21 @@ void dpConfigurationDialog::onItemClicked_typeSource(const QModelIndex& index)
if(!bIsHad && m_pModel_typeSelected) if(!bIsHad && m_pModel_typeSelected)
{ {
int nMaximumType = m_pModel_typeSelected->rowCount();
if(m_pDataPanel && (m_pDataPanel->getType() == lineChart || m_pDataPanel->getType() == curveChart))
nMaximumType = 2;
if(m_pModel_typeSelected->rowCount() >= nMaximumType)
{
if(!ui->errorTip->isVisible())
{
ui->errorTip->setVisible(true);
ui->errorTip->setToolTip(QString("当前面板最多展示 %1 种类型数据").arg(nMaximumType));
//QTimer::singleShot(6000, this, [this]{ui->errorTip->setVisible(false);});
}
return;
}
QStandardItem* newItem = new QStandardItem(item->text()); QStandardItem* newItem = new QStandardItem(item->text());
newItem->setEditable(false); newItem->setEditable(false);
m_pModel_typeSelected->appendRow(newItem); m_pModel_typeSelected->appendRow(newItem);
@ -292,6 +320,9 @@ void dpConfigurationDialog::onBtnClicked_remove_type()
if(selectionModel && m_pModel_typeSelected) if(selectionModel && m_pModel_typeSelected)
{ {
int nCurrentRow = selectionModel->currentIndex().row(); int nCurrentRow = selectionModel->currentIndex().row();
if(nCurrentRow == -1)
return;
QList<QStandardItem*> items = m_pModel_typeSelected->takeRow(nCurrentRow); QList<QStandardItem*> items = m_pModel_typeSelected->takeRow(nCurrentRow);
for(QStandardItem* item: items) for(QStandardItem* item: items)
delete item; delete item;
@ -302,6 +333,8 @@ void dpConfigurationDialog::onBtnClicked_remove_type()
ui->errorTip->setToolTip(QString::fromStdWString(L"要至少选择一个数据类型")); ui->errorTip->setToolTip(QString::fromStdWString(L"要至少选择一个数据类型"));
ui->btnConfirm->setEnabled(false); ui->btnConfirm->setEnabled(false);
} }
else if(ui->errorTip->isVisible())
ui->errorTip->setVisible(false);
} }
} }

View File

@ -26,11 +26,16 @@ struct configurationResults
{ {
QStandardItemModel* m_pModel_dataType; QStandardItemModel* m_pModel_dataType;
QStandardItemModel* m_pModel_dataSource; QStandardItemModel* m_pModel_dataSource;
QString dataServiceIP;
int dataServicePort;
configurationResults() configurationResults()
{ {
m_pModel_dataType = nullptr; m_pModel_dataType = nullptr;
m_pModel_dataSource = nullptr; m_pModel_dataSource = nullptr;
dataServiceIP = "127.0.0.1";
dataServicePort = 1987;
} }
void setParent(QObject* parent) void setParent(QObject* parent)

View File

@ -59,6 +59,8 @@ public:
void setName(const QString&); void setName(const QString&);
const QString& getName(); const QString& getName();
DataPanelType getType();
void setInitialSize(const QSize&); void setInitialSize(const QSize&);
void setDisplayAreaSize(const QSize&); void setDisplayAreaSize(const QSize&);
void resizeByRatio(double, double); //通过缩放比例做resize在所属dasboard的resizeEvent中调用 void resizeByRatio(double, double); //通过缩放比例做resize在所属dasboard的resizeEvent中调用
@ -111,6 +113,7 @@ private:
QBoxLayout* m_pLayout; QBoxLayout* m_pLayout;
QScrollArea* m_pScrollArea; QScrollArea* m_pScrollArea;
PanelToolWidget* m_pToolWidget; PanelToolWidget* m_pToolWidget;
DataPanelType m_type;
PanelConfigurationWidget* m_pConfigurationWidget; PanelConfigurationWidget* m_pConfigurationWidget;
CustomBorderContainer* m_pCustomBorderContainer; CustomBorderContainer* m_pCustomBorderContainer;

View File

@ -29,6 +29,7 @@ PanelToolWidget::~PanelToolWidget()
DataPanel::DataPanel(QWidget *parent, DataPanelType type) DataPanel::DataPanel(QWidget *parent, DataPanelType type)
: QDialog(parent) : QDialog(parent)
,m_type(type)
{ {
setWindowFlags(Qt::FramelessWindowHint | Qt::SubWindow); setWindowFlags(Qt::FramelessWindowHint | Qt::SubWindow);
//setAttribute(Qt::WA_StaticContents, false); // 禁用静态内容优化 //setAttribute(Qt::WA_StaticContents, false); // 禁用静态内容优化
@ -308,6 +309,11 @@ const QString& DataPanel::getName()
return m_strName; return m_strName;
} }
DataPanelType DataPanel::getType()
{
return m_type;
}
void DataPanel::setInitialSize(const QSize& size) void DataPanel::setInitialSize(const QSize& size)
{ {
resize(size); resize(size);
@ -381,7 +387,7 @@ void DataPanel::setDateTime(const QDateTime& dateTime)
baseWidget->setDateTime(dateTime); baseWidget->setDateTime(dateTime);
//请求数据 //请求数据
DataManager::instance()->requestData("dataType", this); //DataManager::instance()->requestData("dataType", this);
} }
void DataPanel::setTimeRange(TimeUnit unit) void DataPanel::setTimeRange(TimeUnit unit)

View File

@ -493,7 +493,7 @@ background-color:transparent;
QLineEdit QLineEdit
{ {
font: 10pt &quot;黑体&quot;; font: 11pt &quot;黑体&quot;;
background-color: rgb(24, 32, 38); background-color: rgb(24, 32, 38);
} }
</string> </string>
@ -511,7 +511,7 @@ background-color: rgb(24, 32, 38);
<string>数据服务</string> <string>数据服务</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_serverIP"> <widget class="QLabel" name="label_serviceIP">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>31</x> <x>31</x>
@ -524,7 +524,7 @@ background-color: rgb(24, 32, 38);
<string>服务地址:</string> <string>服务地址:</string>
</property> </property>
</widget> </widget>
<widget class="QLineEdit" name="serverIP"> <widget class="QLineEdit" name="serviceIP">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>110</x> <x>110</x>
@ -534,7 +534,7 @@ background-color: rgb(24, 32, 38);
</rect> </rect>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_serverPort"> <widget class="QLabel" name="label_serviicePort">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>30</x> <x>30</x>
@ -547,7 +547,7 @@ background-color: rgb(24, 32, 38);
<string>服务端口:</string> <string>服务端口:</string>
</property> </property>
</widget> </widget>
<widget class="QLineEdit" name="serverPort"> <widget class="QLineEdit" name="servicePort">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>110</x> <x>110</x>