DiagramDesigner/diagramCavas/source/monitorConfigDlg.cpp

267 lines
9.4 KiB
C++
Raw Normal View History

2025-11-21 19:22:41 +08:00
#include "monitorConfigDlg.h"
#include "ui_monitorConfigDlg.h"
2025-12-19 18:28:13 +08:00
#include <QCompleter>
#include <QStringListModel>
#include <QKeyEvent>
2025-11-21 19:22:41 +08:00
#include "monitorPanel.h"
2025-12-19 18:28:13 +08:00
#include "uiCommunicationBus.h"
2025-11-21 19:22:41 +08:00
#include "global.h"
MonitorConfigDlg::MonitorConfigDlg(QWidget *parent)
: QDialog(parent)
, ui(new Ui::monitorConfigDlg)
,_parent(nullptr)
,_curItemModel(nullptr)
2025-12-19 18:28:13 +08:00
,_recommandCompleter(nullptr)
,_strLstModel(nullptr)
2025-11-21 19:22:41 +08:00
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
_parent = dynamic_cast<MonitorPanel*>(parent);
initial();
}
MonitorConfigDlg::~MonitorConfigDlg()
{
delete ui;
}
void MonitorConfigDlg::initial()
{
ui->treeView_item->setModel(_parent->getLstModel());
connect(ui->btn_ok,&QPushButton::clicked,this,&MonitorConfigDlg::onOkClicked);
connect(ui->btn_cancel,&QPushButton::clicked,this,&MonitorConfigDlg::onCancelClicked);
connect(ui->cb_type,&QComboBox::currentIndexChanged,this,&MonitorConfigDlg::onTypeChanged);
connect(ui->treeView_item->selectionModel(), &QItemSelectionModel::selectionChanged,
this, &MonitorConfigDlg::onItemSelectionChanged);
ui->treeView_item->setHeaderHidden(true);
ui->treeView_para->setHeaderHidden(true);
ui->le_searchPara->setPlaceholderText("搜索参数");
_curItemModel = new QStandardItemModel(this);
ui->treeView_para->setModel(_curItemModel);
connect(_curItemModel,&QStandardItemModel::itemChanged, this,&MonitorConfigDlg::onPropertyCheckChanged);
connect(ui->treeView_para->selectionModel(), &QItemSelectionModel::currentChanged,
this, &MonitorConfigDlg::onPropertySelectionChanged);
2025-12-19 18:28:13 +08:00
_recommandCompleter = new QCompleter(this);
_recommandCompleter->setCaseSensitivity(Qt::CaseInsensitive);
_recommandCompleter->setFilterMode(Qt::MatchContains);
_recommandCompleter->setCompletionMode(QCompleter::PopupCompletion);
_strLstModel = new QStringListModel(this);
_recommandCompleter->setModel(_strLstModel);
ui->le_query->setCompleter(_recommandCompleter);
ui->le_query->installEventFilter(this);
ui->le_query->setPlaceholderText("输入空格获取初始值");
connect(ui->le_query, &QLineEdit::textChanged, this, [=](const QString &text) {
if (text.endsWith(".")) {
onConnectParamChanged(text);
}
});
//connect(ui->le_query,&QLineEdit::textChanged, this,&MonitorConfigDlg::onConnectParamChanged);
2025-11-21 19:22:41 +08:00
}
void MonitorConfigDlg::updateSelectedItems()
{
ui->treeView_item->expandAll();
_tempConfig = _parent->getModelController()->getMonitorPara();
2025-12-19 18:28:13 +08:00
}
void MonitorConfigDlg::updateRecommandLst(QStringList lst)
{
for(auto& newName:lst){
if(!newName.isEmpty()){
if(!_curRecommandLst.contains(newName)){
_curRecommandLst.append(newName);
}
}
}
_strLstModel->setStringList(_curRecommandLst);
if (_recommandCompleter->popup()->isVisible()) {
_recommandCompleter->popup()->hide();
}
_recommandCompleter->complete(); // 重新显示补全列表
2025-11-21 19:22:41 +08:00
}
void MonitorConfigDlg::onOkClicked()
{
if (ui->treeView_para->currentIndex().isValid()) { //确定前先保存当前属性
savePropertyData(ui->treeView_para->currentIndex(),_curUuid);
}
_parent->getModelController()->getMonitorPara() = _tempConfig; //保存临时数据
2025-11-26 20:33:13 +08:00
_parent->getModelController()->monitorItemSet(_curUuid);
2025-11-21 19:22:41 +08:00
hide();
}
void MonitorConfigDlg::onCancelClicked()
{
hide();
}
void MonitorConfigDlg::onTypeChanged(int index)
{
ui->stackedWidget->setCurrentIndex(index);
}
void MonitorConfigDlg::onItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
if (ui->treeView_para->currentIndex().isValid()) { //如果切换设备,先保存属性到上个设备
savePropertyData(ui->treeView_para->currentIndex(),_curUuid);
}
clearProperty();
QStandardItem *root = _curItemModel->invisibleRootItem(); //先清空model
int rowCount = root->rowCount();
if (rowCount > 0) {
_curItemModel->removeRows(0, rowCount);
}
QModelIndexList indexes = selected.indexes();
if(indexes.size() == 1){
auto index = indexes.first();
int nCategory = index.data(Qt::UserRole+1).toInt();
if(nCategory == 0){ //是设备
QUuid uid = index.data(Qt::UserRole+3).toUuid();
_curUuid = uid;
if(_tempConfig.contains(uid)){
auto lstPara = _tempConfig.value(uid);
for(auto& para:lstPara){
auto pParent = findStandardItemAtLevel(_curItemModel,0,para.sGroup,nullptr,0);
if(pParent){ //组已存在
QStandardItem *pItem = new QStandardItem(para.sName);
pItem->setCheckable(true);
pItem->setCheckState(para.bSelected ? Qt::Checked : Qt::Unchecked);
pItem->setData(nCategory,Qt::UserRole+1);
pItem->setData(para.sTag,Qt::UserRole+2);
pParent->appendRow(pItem);
}
else{
QStandardItem *pPar = new QStandardItem(para.sGroup);
pPar->setData(1,Qt::UserRole+1);
QStandardItem *pItem = new QStandardItem(para.sName);
pItem->setCheckable(true);
pItem->setCheckState(para.bSelected ? Qt::Checked : Qt::Unchecked);
pItem->setData(nCategory,Qt::UserRole+1);
pItem->setData(para.sTag,Qt::UserRole+2);
pPar->appendRow(pItem);
_curItemModel->appendRow(pPar);
}
}
}
}
}
ui->treeView_para->expandAll();
}
void MonitorConfigDlg::onPropertyCheckChanged(QStandardItem *item)
{
if(_tempConfig.contains(_curUuid)){
Qt::CheckState state = item->checkState();
QString itemText = item->text();
if (state == Qt::Checked) {
for(auto &info:_tempConfig[_curUuid]){
if(info.sName == itemText){
info.bSelected = true;
}
}
} else if (state == Qt::Unchecked) {
for(auto &info:_tempConfig[_curUuid]){
if(info.sName == itemText){
info.bSelected = false;
}
}
}
}
}
void MonitorConfigDlg::onPropertySelectionChanged(const QModelIndex &current, const QModelIndex &previous)
{
if (previous.isValid()) {
savePropertyData(previous,_curUuid);
}
if (current.isValid()) {
loadPropertyData(current,_curUuid);
}
}
2025-12-19 18:28:13 +08:00
void MonitorConfigDlg::onConnectParamChanged(const QString& str)
{
QVariantMap map;
map.insert("input",str);
UiCommunicationBus::instance()->sendHttpRequest("/measurement/recommend",QVariant(),"GET",map);
}
bool MonitorConfigDlg::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->le_query && event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Space) {
qDebug() << "eventFilter:space";
onConnectParamChanged(ui->le_query->text());
_recommandCompleter->complete();
return true;
}
if (keyEvent->text() == ".") {
qDebug() << "eventFilter:dot";
// 返回false让事件继续传播
}
}
return QDialog::eventFilter(obj, event);
}
2025-11-21 19:22:41 +08:00
void MonitorConfigDlg::savePropertyData(const QModelIndex &previous,QUuid uid)
{
if(_tempConfig.contains(uid)){
if(previous.isValid()){ //保存数据
QString itemText = previous.data().toString();
for(auto &info:_tempConfig[uid]){
if(info.sName == itemText){
info.sTag = ui->le_name->text();
info.sConnectPara = ui->le_query->text();
info.nShowType = ui->cb_type->currentIndex();
info.bShowDiagram = ui->cb_outVisible->currentIndex();
info.nGraphType = ui->cb_graphType->currentIndex();
info.sTimeRange = ui->cb_timeRange->currentText();
}
}
}
}
}
void MonitorConfigDlg::loadPropertyData(const QModelIndex &current,QUuid uid)
{
QList<monitorItemAttributeInfo> lst;
if(_tempConfig.contains(uid)){
lst = _tempConfig.value(uid);
}
if(current.isValid()){ //加载新数据
QString itemText = current.data().toString();
for(auto &info:lst){
if(info.sName == itemText){
ui->le_name->setText(info.sTag);
ui->le_query->setText(info.sConnectPara);
ui->cb_type->setCurrentIndex(info.nShowType);
if(info.nShowType == 0){ //字符
ui->cb_outVisible->setCurrentIndex(info.bShowDiagram);
}else{ //图表
ui->cb_graphType->setCurrentIndex(info.nGraphType);
ui->cb_timeRange->setCurrentText(info.sTimeRange);
}
}
}
}
}
void MonitorConfigDlg::clearProperty()
{
ui->le_name->clear();
ui->le_query->clear();
ui->cb_type->setCurrentIndex(0);
ui->cb_outVisible->setCurrentIndex(0);
ui->cb_graphType->setCurrentIndex(0);
ui->cb_timeRange->setCurrentIndex(0);
}