feat:增加数据类型和数据源之间配置逻辑约束以及同步功能

This commit is contained in:
duanshengchao 2025-07-07 19:01:53 +08:00
parent 1c2d83e8fb
commit d9a74285e9
4 changed files with 105 additions and 61 deletions

View File

@ -152,41 +152,64 @@ void dpConfigurationDialog::createDataSourceList()
{
//demo先临时写死后续改为接口动态创建
QStandardItem* rootItem = m_pModel_dataSource->invisibleRootItem();
QStandardItem* stationItem = new QStandardItem("测试站");
stationItem->setEditable(false);
stationItem->setData("station", Qt::UserRole + itemRole_tag);
rootItem->appendRow(stationItem);
QStandardItem* componentItem = new QStandardItem("异步电机");
componentItem->setEditable(false);
componentItem->setData("component", Qt::UserRole + itemRole_tag);
stationItem->appendRow(componentItem);
QStandardItem* currentItem = new QStandardItem("电流");
currentItem->setEditable(false);
currentItem->setData("current", Qt::UserRole + itemRole_tag);
currentItem->setData(0, Qt::UserRole + itemRole_stationID);
currentItem->setData(0, Qt::UserRole + itemRole_componentID);
currentItem->setData(0, Qt::UserRole + itemRole_pointID);
currentItem->setData(RealTimeDataType::current, Qt::UserRole + itemRole_dataType);
componentItem->appendRow(currentItem);
QStandardItem* voltageItem = new QStandardItem("电压");
voltageItem->setEditable(false);
voltageItem->setData("voltage", Qt::UserRole + itemRole_tag);
voltageItem->setData(0, Qt::UserRole + itemRole_stationID);
voltageItem->setData(0, Qt::UserRole + itemRole_componentID);
voltageItem->setData(1, Qt::UserRole + itemRole_pointID);
voltageItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType);
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);
for(int i = 0; i < 3; i++)
{
QString strStation = QString("测试站-") + QString::number(i + 1);
QStandardItem* stationItem = new QStandardItem(strStation);
stationItem->setEditable(false);
stationItem->setData("station", Qt::UserRole + itemRole_tag);
rootItem->appendRow(stationItem);
QStandardItem* componentItem = new QStandardItem("异步电机");
componentItem->setEditable(false);
componentItem->setData("component", Qt::UserRole + itemRole_tag);
stationItem->appendRow(componentItem);
QStandardItem* voltageItem = new QStandardItem("电压");
voltageItem->setEditable(false);
voltageItem->setData("point", Qt::UserRole + itemRole_tag);
voltageItem->setData(i, Qt::UserRole + itemRole_stationID);
voltageItem->setData(0, Qt::UserRole + itemRole_componentID);
voltageItem->setData(0, Qt::UserRole + itemRole_pointID);
voltageItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType);
componentItem->appendRow(voltageItem);
QStandardItem* currentItem = new QStandardItem("电流");
currentItem->setEditable(false);
currentItem->setData("point", Qt::UserRole + itemRole_tag);
currentItem->setData(i, Qt::UserRole + itemRole_stationID);
currentItem->setData(0, Qt::UserRole + itemRole_componentID);
currentItem->setData(1, Qt::UserRole + itemRole_pointID);
currentItem->setData(RealTimeDataType::current, Qt::UserRole + itemRole_dataType);
componentItem->appendRow(currentItem);
QStandardItem* powerItem = new QStandardItem("功率");
powerItem->setEditable(false);
powerItem->setData("point", Qt::UserRole + itemRole_tag);
powerItem->setData(i, Qt::UserRole + itemRole_stationID);
powerItem->setData(0, Qt::UserRole + itemRole_componentID);
powerItem->setData(2, Qt::UserRole + itemRole_pointID);
powerItem->setData(RealTimeDataType::power, Qt::UserRole + itemRole_dataType);
componentItem->appendRow(powerItem);
}
ui->dataSourceList->expandAll();
}
void dpConfigurationDialog::removeDataSelected(int deleteRow)
{
QList<QStandardItem*> items = m_pModel_dataSelected->takeRow(deleteRow);
for(QStandardItem* item: items)
delete item;
//更新颜色-从当前删除项往后的所有项
for(int row = deleteRow; row < m_pModel_dataSelected->rowCount(); row++)
{
QStandardItem* item = m_pModel_dataSelected->item(row, 0);
if(item)
{
QColor color = g_globalColor.value(item->row() % g_globalColor.size());
item->setData(color, Qt::DecorationRole);
}
}
}
void dpConfigurationDialog::setPanel(DataPanel* pPanel)
{
m_pDataPanel = pPanel;
@ -303,6 +326,8 @@ void dpConfigurationDialog::onItemClicked_typeSource(const QModelIndex& index)
QStandardItem* newItem = new QStandardItem(item->text());
newItem->setEditable(false);
RealTimeDataType dataType = (RealTimeDataType)item->data(Qt::UserRole + itemRole_dataType).toInt();
newItem->setData(dataType, Qt::UserRole + itemRole_dataType);
m_pModel_typeSelected->appendRow(newItem);
ui->typeSelectedList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
@ -323,6 +348,18 @@ void dpConfigurationDialog::onBtnClicked_remove_type()
if(nCurrentRow == -1)
return;
//同步删除dataSource中已选择的该类型数据
RealTimeDataType itemDataType = (RealTimeDataType)m_pModel_typeSelected->data(selectionModel->currentIndex(), Qt::UserRole + itemRole_dataType).toInt();
for(int i = m_pModel_dataSelected->rowCount() - 1; i >= 0; i--) //倒序查找因为执行removeDataSelected时内部会从删除项往后更新颜色倒序可以减少循环次数
{
RealTimeDataType dataType = (RealTimeDataType)m_pModel_dataSelected->item(i, 0)->data(Qt::UserRole + itemRole_dataType).toInt();
if(itemDataType == dataType)
{
removeDataSelected(i);
//i++;
}
}
QList<QStandardItem*> items = m_pModel_typeSelected->takeRow(nCurrentRow);
for(QStandardItem* item: items)
delete item;
@ -347,6 +384,24 @@ void dpConfigurationDialog::onItemClicked_dataSource(const QModelIndex& index)
if(strTag != "point")
return;
//只能对已选择的数据类型进行选择
bool bCanbeSelect = false;
RealTimeDataType itemDataType = (RealTimeDataType)item->data(Qt::UserRole + itemRole_dataType).toInt();
//qDebug() << "itemDataType" << itemDataType;
for(int i = 0; i< m_pModel_typeSelected->rowCount(); i++)
{
RealTimeDataType dataType = (RealTimeDataType)m_pModel_typeSelected->item(i, 0)->data(Qt::UserRole + itemRole_dataType).toInt();
//qDebug() << "dataType" << dataType;
if(itemDataType == dataType)
{
bCanbeSelect = true;
break;
}
}
if(!bCanbeSelect)
return;
QString strText = "";
QStandardItem* compontItme = item->parent();
if(compontItme && compontItme->data(Qt::UserRole + itemRole_tag).toString() == "component")
@ -380,8 +435,9 @@ void dpConfigurationDialog::onItemClicked_dataSource(const QModelIndex& index)
newItem->setData(item->data(Qt::UserRole + itemRole_stationID), Qt::UserRole + itemRole_stationID);
newItem->setData(item->data(Qt::UserRole + itemRole_componentID), Qt::UserRole + itemRole_componentID);
newItem->setData(item->data(Qt::UserRole + itemRole_pointID), Qt::UserRole + itemRole_pointID);
newItem->setData(item->data(Qt::UserRole + itemRole_dataType), Qt::UserRole + itemRole_dataType);
m_pModel_dataSelected->appendRow(newItem);
QColor color = g_globlaColor.value(newItem->row() % g_globlaColor.size());
QColor color = g_globalColor.value(newItem->row() % g_globalColor.size());
newItem->setData(color, Qt::DecorationRole);
ui->dataSelectedList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
}
@ -393,19 +449,6 @@ void dpConfigurationDialog::onBtnClicked_remove_source()
if(selectionModel && m_pModel_dataSelected)
{
int nCurrentRow = selectionModel->currentIndex().row();
QList<QStandardItem*> items = m_pModel_dataSelected->takeRow(nCurrentRow);
for(QStandardItem* item: items)
delete item;
//更新颜色-从当前删除项往后的所有项
for(int row = nCurrentRow; row < m_pModel_dataSelected->rowCount(); row++)
{
QStandardItem* item = m_pModel_dataSelected->item(row, 0);
if(item)
{
QColor color = g_globlaColor.value(item->row() % g_globlaColor.size());
item->setData(color, Qt::DecorationRole);
}
}
removeDataSelected(nCurrentRow);
}
}

View File

@ -43,6 +43,7 @@ private:
void initialize();
void copyModelData(QStandardItemModel*, QStandardItemModel*);
void createDataSourceList();
void removeDataSelected(int);
Ui::dpConfigurationDialog* ui;
QPushButton* m_curActiveTab;

View File

@ -48,7 +48,7 @@ enum TimeUnit
};
extern MessageDialogBtn g_msgDlgBtn;
extern QHash<int, QColor> g_globlaColor;
extern QHash<int, QColor> g_globalColor;
extern QHash<int, QString> g_timeUnit;
void initializeGlobalVariable();

View File

@ -2,24 +2,24 @@
MessageDialogBtn g_msgDlgBtn = btn_Null;
QHash<int, QColor> g_globlaColor;
QHash<int, QColor> g_globalColor;
QHash<int, QString> g_timeUnit;
void initializeGlobalVariable()
{
//颜色
g_globlaColor.insert(0, QColor(153, 50, 204)); //深兰花紫
g_globlaColor.insert(1, QColor(127, 255, 170)); //绿玉\碧绿色
g_globlaColor.insert(2, QColor(0, 206, 209)); //深绿宝石
g_globlaColor.insert(3, QColor(46, 139, 87)); //海洋绿
g_globlaColor.insert(4, QColor(225, 215, 0)); //金色
g_globlaColor.insert(5, QColor(255, 165, 0)); //橙色
g_globlaColor.insert(6, QColor(144, 238, 144)); //浅绿色
g_globlaColor.insert(7, QColor(218, 112, 214)); //兰花的紫色
g_globlaColor.insert(8, QColor(70, 130, 180)); //钢蓝
g_globlaColor.insert(9, QColor(218, 165, 32)); //秋麒麟
g_globlaColor.insert(10, QColor(240, 128, 128)); //淡珊瑚色
g_globlaColor.insert(11, QColor(70, 130, 180)); //钢蓝
g_globalColor.insert(0, QColor(153, 50, 204)); //深兰花紫
g_globalColor.insert(1, QColor(127, 255, 170)); //绿玉\碧绿色
g_globalColor.insert(2, QColor(0, 206, 209)); //深绿宝石
g_globalColor.insert(3, QColor(46, 139, 87)); //海洋绿
g_globalColor.insert(4, QColor(225, 215, 0)); //金色
g_globalColor.insert(5, QColor(255, 165, 0)); //橙色
g_globalColor.insert(6, QColor(144, 238, 144)); //浅绿色
g_globalColor.insert(7, QColor(218, 112, 214)); //兰花的紫色
g_globalColor.insert(8, QColor(70, 130, 180)); //钢蓝
g_globalColor.insert(9, QColor(218, 165, 32)); //秋麒麟
g_globalColor.insert(10, QColor(240, 128, 128)); //淡珊瑚色
g_globalColor.insert(11, QColor(70, 130, 180)); //钢蓝
//时间单位
g_timeUnit.insert(TU_Year, QString::fromWCharArray(L"365d"));
g_timeUnit.insert(TU_Month, QString::fromWCharArray(L"30d"));