1194 lines
36 KiB
C++
1194 lines
36 KiB
C++
#include "AlarmManageWidget.h"
|
||
#include "ui_AlarmManageWidget.h"
|
||
#include "pub_logger_api/logger.h"
|
||
#include "perm_mng_api/PermMngApi.h"
|
||
#include "boost/asio/ip/host_name.hpp"
|
||
|
||
#include <QThread>
|
||
#include <QtWidgets>
|
||
#include "net_msg_bus_api/MsgBusApi.h"
|
||
#include "AlarmDevTreeView.h"
|
||
#include "AlarmDevTreeModel.h"
|
||
#include "AlarmMng.h"
|
||
#include "AlarmPointTableModel.h"
|
||
#include "AlarmManageCommon.h"
|
||
#include "AddObjAlarmDialog.h"
|
||
#include "pub_utility_api/I18N.h"
|
||
#include "pub_utility_api/FileUtil.h"
|
||
|
||
AlarmManageWidget::AlarmManageWidget(QWidget *parent, bool editMode) :
|
||
QWidget(parent),
|
||
ui(new Ui::AlarmManageWidget),
|
||
m_pDevTreeModel(Q_NULLPTR),
|
||
m_pAiPointTableModel(Q_NULLPTR),
|
||
m_pDiPointTableModel(Q_NULLPTR),
|
||
m_pThread(Q_NULLPTR),
|
||
m_pReadDb(Q_NULLPTR),
|
||
m_pWriteDb(Q_NULLPTR),
|
||
m_bIsEditMode(editMode),
|
||
m_devgName(QString()),
|
||
m_buttonGroup(Q_NULLPTR),
|
||
m_curStackIndex(0)
|
||
{
|
||
ui->setupUi(this);
|
||
m_strMediaPath = "";
|
||
qRegisterMetaType<PointInfo>("PointInfo");
|
||
qRegisterMetaType<QStringList>("QStringList");
|
||
qRegisterMetaType<QList<PointInfoPtr> >("ListPointInfoPtr");
|
||
|
||
qRegisterMetaType<QList<AlarmCalcInfoPtr> >("ListAlarmCalcInfoPtr");
|
||
|
||
initLayout();
|
||
if(!m_bIsEditMode)
|
||
{
|
||
m_buttonGroup = new QButtonGroup;
|
||
m_buttonGroup->setExclusive(true);
|
||
m_buttonGroup->addButton(ui->aibt,0);
|
||
m_buttonGroup->addButton(ui->dibt,1);
|
||
initMember();
|
||
initData();
|
||
initCurUser();
|
||
initConnect();
|
||
initView();
|
||
m_pThread->start();
|
||
}
|
||
QDir dir(QString::fromStdString(iot_public::CFileUtil::getCurModuleDir()));
|
||
dir.cdUp();
|
||
dir.cdUp();
|
||
dir.cd("data");
|
||
dir.cd("sound");
|
||
|
||
m_strMediaPath = dir.absolutePath();
|
||
}
|
||
|
||
AlarmManageWidget::~AlarmManageWidget()
|
||
{
|
||
AlarmMng::instance()->destory();
|
||
delete ui;
|
||
}
|
||
|
||
void AlarmManageWidget::initLayout()
|
||
{
|
||
ui->hsplitter->setSizes(QList<int>()<<200<<900<<300);
|
||
|
||
ui->cbAlarmPriority->setView(new QListView());
|
||
ui->cbIfLimit->setView(new QListView());
|
||
ui->cbIfObj->setView(new QListView());
|
||
ui->cbLevel->setView(new QListView());
|
||
}
|
||
|
||
void AlarmManageWidget::initMember()
|
||
{
|
||
initModel();
|
||
if(m_pThread == NULL)
|
||
{
|
||
m_pThread = new QThread();
|
||
}
|
||
|
||
AlarmMng::instance()->moveToThread(m_pThread);
|
||
m_pWriteDb = new iot_dbms::CDbApi(DB_CONN_MODEL_WRITE);
|
||
m_pReadDb = new iot_dbms::CDbApi(DB_CONN_MODEL_READ);
|
||
if(!m_pWriteDb->open())
|
||
{
|
||
LOGERROR("打开数据库失败,error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
|
||
}
|
||
if(!m_pReadDb->open())
|
||
{
|
||
LOGERROR("打开数据库失败,error:%s",m_pReadDb->getLastErrorString().toStdString().c_str());
|
||
}
|
||
|
||
m_hostName = QString::fromStdString(boost::asio::ip::host_name());
|
||
ui->widget_3->setMinimumWidth(300);
|
||
|
||
}
|
||
|
||
void AlarmManageWidget::initModel()
|
||
{
|
||
if(m_pDevTreeModel == NULL)
|
||
{
|
||
m_pDevTreeModel = new AlarmDevTreeModel(this,ui->devTreeView);
|
||
}
|
||
//ui->devTreeView->header()->setHidden(true);
|
||
ui->devTreeView->setModel(m_pDevTreeModel);
|
||
ui->devTreeView->expandAll();
|
||
|
||
if(m_pAiPointTableModel == NULL)
|
||
{
|
||
m_pAiPointTableModel = new AlarmPointTableModel(this,ui->aitableView);
|
||
}
|
||
ui->aitableView->setModel(m_pAiPointTableModel);
|
||
ui->aitableView->setColumnWidth(0,200);
|
||
ui->aitableView->setColumnWidth(1,140);
|
||
ui->aitableView->setColumnWidth(2,180);
|
||
ui->aitableView->setColumnWidth(3,140);
|
||
ui->aitableView->setColumnWidth(4,60);
|
||
|
||
if(m_pDiPointTableModel == NULL)
|
||
{
|
||
m_pDiPointTableModel = new AlarmPointTableModel(this,ui->ditableView);
|
||
}
|
||
ui->ditableView->setModel(m_pDiPointTableModel);
|
||
ui->ditableView->setColumnWidth(0,200);
|
||
ui->ditableView->setColumnWidth(1,140);
|
||
ui->ditableView->setColumnWidth(2,180);
|
||
ui->ditableView->setColumnWidth(3,140);
|
||
ui->ditableView->setColumnWidth(4,60);
|
||
}
|
||
|
||
void AlarmManageWidget::initData()
|
||
{
|
||
ui->cbIfObj->clear();
|
||
ui->cbIfObj->addItem(tr("是"),1);
|
||
ui->cbIfObj->addItem(tr("否"),0);
|
||
ui->cbIfObj->setCurrentIndex(1);
|
||
|
||
ui->cbAlarmPriority->clear();
|
||
m_alarmLevelMap = AlarmMng::instance()->getAlarmLevel();
|
||
int index = 0;
|
||
QMap<int,QString >::iterator it_level = m_alarmLevelMap.begin();
|
||
while (it_level != m_alarmLevelMap.end()) {
|
||
ui->cbAlarmPriority->addItem(it_level.value(),it_level.key());
|
||
m_alarmLevelIndexMap[it_level.key()] = index++;
|
||
it_level++;
|
||
}
|
||
|
||
m_alarmLevelActionMap = AlarmMng::instance()->getAlarmLevelAction();
|
||
m_alarmActionMap = AlarmMng::instance()->getAlarmAction();
|
||
QHBoxLayout *hLayout = new QHBoxLayout;
|
||
QVBoxLayout *vLayout0 = new QVBoxLayout;
|
||
QVBoxLayout *vLayout1 = new QVBoxLayout;
|
||
|
||
index = 0;
|
||
QMap<int,QString >::iterator it = m_alarmActionMap.begin();
|
||
while (it != m_alarmActionMap.end()) {
|
||
|
||
QCheckBox *box = new QCheckBox(it.value(),ui->widget_4);
|
||
m_alarmActionCheckMap[it.key()] = box;
|
||
if(index % 2 == 0)
|
||
{
|
||
vLayout0->addWidget(box);
|
||
}else if(index % 2 == 1)
|
||
{
|
||
vLayout1->addWidget(box);
|
||
}
|
||
index++;
|
||
it++;
|
||
}
|
||
vLayout0->addStretch(100);
|
||
vLayout1->addStretch(100);
|
||
//vLayout2->addStretch(100);
|
||
|
||
hLayout->addLayout(vLayout0);
|
||
|
||
hLayout->addLayout(vLayout1);
|
||
//hLayout->addLayout(vLayout2);
|
||
ui->widget_4->setLayout(hLayout);
|
||
ui->widget_4->setEnabled(false);
|
||
alarmActionCheckChange(0);
|
||
|
||
ui->cbIfLimit->clear();
|
||
ui->cbIfLimit->addItem(tr("是"),1);
|
||
ui->cbIfLimit->addItem(tr("否"),0);
|
||
|
||
ui->cbLevel->clear();
|
||
ui->cbLevel->addItem(tr("0"),0);
|
||
ui->cbLevel->addItem(tr("1"),1);
|
||
ui->cbLevel->addItem(tr("2"),2);
|
||
|
||
setEnableProperty(false);
|
||
}
|
||
|
||
bool AlarmManageWidget::initCurUser()
|
||
{
|
||
m_userId = -1;
|
||
m_usergId = -1;
|
||
iot_service::CPermMngApiPtr permMngPtr = iot_service::getPermMngInstance("base");
|
||
if(permMngPtr == NULL || (PERM_NORMAL != permMngPtr->PermDllInit()))
|
||
{
|
||
LOGERROR("权限接口初始化失败!");
|
||
return false;
|
||
}
|
||
|
||
int userId;
|
||
int usergId;
|
||
int level;
|
||
int loginSec;
|
||
std::string name;
|
||
|
||
std::string userName;
|
||
std::string usergName;
|
||
|
||
if(permMngPtr->CurUser(userName,usergName,level,loginSec,name) == 0)
|
||
{
|
||
//qDebug()<<QString::fromStdString(usergName);
|
||
}
|
||
|
||
if(permMngPtr->CurUser(userId, usergId,level,loginSec,name) == 0)
|
||
{
|
||
m_userId = userId;
|
||
m_usergId = usergId;
|
||
}else
|
||
{
|
||
LOGERROR("获取当前登录用户失败!");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void AlarmManageWidget::initConnect()
|
||
{
|
||
connect(ui->lineEdit, &QLineEdit::returnPressed, this, &AlarmManageWidget::filter); //过滤
|
||
connect(ui->search,&QPushButton::clicked,this,&AlarmManageWidget::filter); //过滤
|
||
connect(AlarmMng::instance(),&AlarmMng::addAiPoint,m_pAiPointTableModel,&AlarmPointTableModel::addPoint,Qt::QueuedConnection);
|
||
connect(AlarmMng::instance(),&AlarmMng::addDiPoint,m_pDiPointTableModel,&AlarmPointTableModel::addPoint,Qt::QueuedConnection);
|
||
connect(ui->cbAlarmPriority,SIGNAL(currentIndexChanged(int)),this,SLOT(alarmActionCheckChange(int)));
|
||
connect(ui->cbIfLimit,&QComboBox::currentTextChanged,this,&AlarmManageWidget::ifLimitChange);
|
||
connect(ui->cbIfObj,&QComboBox::currentTextChanged,this,&AlarmManageWidget::ifObjChange);
|
||
|
||
connect(ui->push,&QPushButton::clicked,this,&AlarmManageWidget::getPushPicPath);
|
||
connect(ui->voice,&QPushButton::clicked,this,&AlarmManageWidget::getVoicePath);
|
||
// connect(ui->aitableView,&AlarmPointTableView::clicked,this,&AlarmManageWidget::showAiAlarmProperty);
|
||
// connect(ui->ditableView,&AlarmPointTableView::clicked,this,&AlarmManageWidget::showDiAlarmProperty);
|
||
|
||
connect(ui->devTreeView,&AlarmDevTreeView::clicked,this,&AlarmManageWidget::checkClick,Qt::QueuedConnection);
|
||
connect(this,&AlarmManageWidget::sigSelectPoint,AlarmMng::instance(),&AlarmMng::slotSelectPoint,Qt::QueuedConnection);
|
||
connect(this,&AlarmManageWidget::sigClearPointTable,m_pAiPointTableModel,&AlarmPointTableModel::slotClearPointTable,Qt::QueuedConnection);
|
||
connect(this,&AlarmManageWidget::sigClearPointTable,m_pDiPointTableModel,&AlarmPointTableModel::slotClearPointTable,Qt::QueuedConnection);
|
||
|
||
connect(ui->cbLevel,&QComboBox::currentTextChanged,this,&AlarmManageWidget::ifLimitLevelChange);
|
||
|
||
connect(ui->pushButton_5,&QPushButton::clicked,this,&AlarmManageWidget::save);
|
||
|
||
connect(ui->pushButton_2,&QPushButton::clicked,this,&AlarmManageWidget::addObjAlarm);
|
||
connect(m_buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(updateStack(int)));
|
||
connect(ui->pointFilter,&QPushButton::clicked,this,&AlarmManageWidget::filterPoint);
|
||
connect(ui->checkBox,&QCheckBox::stateChanged,this,&AlarmManageWidget::sigOrMul);
|
||
|
||
connect(ui->aitableView,&AlarmPointTableView::sigBrushProperty,this,&AlarmManageWidget::showAiProperty);
|
||
connect(ui->ditableView,&AlarmPointTableView::sigBrushProperty,this,&AlarmManageWidget::showDiProperty);
|
||
}
|
||
|
||
void AlarmManageWidget::setEnableProperty(bool enable)
|
||
{
|
||
ui->widget_3->setEnabled(enable);
|
||
}
|
||
|
||
void AlarmManageWidget::setEnableDesc(bool enable)
|
||
{
|
||
ui->groupBox_4->setEnabled(enable);
|
||
}
|
||
|
||
void AlarmManageWidget::setEnableObjAlarm(bool enable)
|
||
{
|
||
ui->groupBox_2->setEnabled(enable);
|
||
ui->groupBox_2->setHidden(!enable);
|
||
}
|
||
|
||
void AlarmManageWidget::setEnableLimitAlarm(bool enable)
|
||
{
|
||
ui->groupBox_3->setEnabled(enable);
|
||
ui->groupBox_3->setHidden(!enable);
|
||
}
|
||
|
||
void AlarmManageWidget::saveAi()
|
||
{
|
||
QModelIndexList aiList = ui->aitableView->selectionModel()->selectedRows(0);
|
||
if(aiList.size() < 1)
|
||
{
|
||
return ;
|
||
}
|
||
if(aiList.size() == 1)
|
||
{
|
||
QString desc = ui->lineEdit_3->text();
|
||
|
||
if(desc.isEmpty())
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("点描述不能为空!"));
|
||
return ;
|
||
}
|
||
}
|
||
if(!checkAiIfSave())
|
||
{
|
||
return ;
|
||
}
|
||
|
||
//1越限首先要修改点表,然后去修改越限表
|
||
QString desc = ui->lineEdit_3->text();
|
||
m_pWriteDb->transaction();
|
||
//先修改描述(描述应不支持批量修改)
|
||
QList<PointInfoPtr> pointList;
|
||
foreach (QModelIndex index, aiList) {
|
||
|
||
pointList.append(m_pAiPointTableModel->getPointInfoByRow(index.row()));
|
||
}
|
||
if(pointList.size() == 1)
|
||
{
|
||
QString sqlUpTag =QString("update %1 set description ='%2' where tag_name ='%3'").arg("analog").arg(desc).arg(pointList.at(0)->m_tag);
|
||
m_pWriteDb->execute(sqlUpTag);
|
||
}else
|
||
{
|
||
desc = QString();
|
||
}
|
||
QString condition=QString();
|
||
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
|
||
{
|
||
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
|
||
}
|
||
if(!condition.isEmpty())
|
||
{
|
||
condition.resize(condition.size() - 2);
|
||
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
|
||
}
|
||
|
||
double limitup1 = ui->doubleSpinBox->value();
|
||
double limitup2 = ui->doubleSpinBox_3->value();
|
||
double limitlow1 = ui->doubleSpinBox_2->value();
|
||
double limitlow2 = ui->doubleSpinBox_4->value();
|
||
|
||
int obj = ui->cbIfObj->currentData().toInt();
|
||
|
||
int priority = ui->cbAlarmPriority->currentData().toInt();
|
||
|
||
QString push = ui->pushText->text();
|
||
QString voice = ui->voiceText->text();
|
||
|
||
int isLimit = ui->cbIfLimit->currentData().toInt();
|
||
QString sqlupdate;
|
||
|
||
sqlupdate = QString("update %1 set is_limit = %2,sound_name1 ='%3' where %4 ").arg("analog").arg(isLimit).arg(voice).arg(condition);
|
||
m_pWriteDb->execute(sqlupdate);
|
||
QString sqldelete;
|
||
sqldelete = QString("delete from %1 where %4").arg("analog_limit_info").arg(condition);
|
||
m_pWriteDb->execute(sqldelete);
|
||
|
||
int limitLevel = ui->cbLevel->currentData().toInt();
|
||
if(isLimit == 1)
|
||
{
|
||
QString sqlinsert;
|
||
sqlinsert = QString("insert into %1 (tag_name,location_id,sub_system,limit_type,limit_num,limit_up1,limit_low1,limit_up2,limit_low2,cross_percent,return_percent,is_obj_alm_manner,alarm_priority,pic_name,is_water_alm) values ").arg("analog_limit_info");
|
||
for(int idx = 0; idx <pointList.size();idx++)
|
||
{
|
||
sqlinsert += QString(" ('%1',%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,'%14',1), ").arg(pointList.at(idx)->m_tag).arg(pointList.at(idx)->m_loc).arg(pointList.at(idx)->m_sub).arg(1).arg(limitLevel).
|
||
arg(limitup1).arg(limitlow1).arg(limitup2).arg(limitlow2).arg(5).arg(5).arg(obj).arg(priority).arg(push);
|
||
}
|
||
sqlinsert.resize(sqlinsert.size() - 2);
|
||
m_pWriteDb->execute(sqlinsert);
|
||
}
|
||
if(!m_pWriteDb->commit())
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("保存失败!正在回滚事务~"));
|
||
LOGERROR("保存失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
|
||
m_pWriteDb->rollback();
|
||
}else
|
||
{
|
||
for(int index = 0;index <pointList.size();index++)
|
||
{
|
||
pointList.at(index)->m_desc =desc.isEmpty() ? pointList.at(index)->m_desc : desc;
|
||
pointList.at(index)->m_obj = isLimit == 1 ? obj: 0;
|
||
pointList.at(index)->m_priority = isLimit == 1 ? priority: -1;
|
||
}
|
||
QMessageBox::information(0,tr("提示"),tr("保存成功!"));
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::saveDi()
|
||
{
|
||
QModelIndexList diList = ui->ditableView->selectionModel()->selectedRows(0);
|
||
if(diList.size() < 1)
|
||
{
|
||
return ;
|
||
}
|
||
if(diList.size() == 1)
|
||
{
|
||
QString desc = ui->lineEdit_3->text();
|
||
|
||
if(desc.isEmpty())
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("点描述不能为空!"));
|
||
return ;
|
||
}
|
||
}
|
||
|
||
QString desc = ui->lineEdit_3->text();
|
||
m_pWriteDb->transaction();
|
||
//先修改描述(描述应不支持批量修改)
|
||
QList<PointInfoPtr> pointList;
|
||
foreach (QModelIndex index, diList) {
|
||
|
||
pointList.append(m_pDiPointTableModel->getPointInfoByRow(index.row()));
|
||
}
|
||
if(pointList.size() == 1)
|
||
{
|
||
QString sqlUpTag =QString("update %1 set description ='%2' where tag_name ='%3'").arg("digital").arg(desc).arg(pointList.at(0)->m_tag);
|
||
m_pWriteDb->execute(sqlUpTag);
|
||
}else
|
||
{
|
||
desc = QString();
|
||
}
|
||
|
||
QString condition=QString();
|
||
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
|
||
{
|
||
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
|
||
}
|
||
if(!condition.isEmpty())
|
||
{
|
||
condition.resize(condition.size() - 2);
|
||
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
|
||
}
|
||
|
||
int obj = ui->cbIfObj->currentData().toInt();
|
||
int priority = ui->cbAlarmPriority->currentData().toInt();
|
||
QString push = ui->pushText->text();
|
||
QString voice = ui->voiceText->text();
|
||
|
||
QString sql = QString("update %1 set is_obj_alm_manner = %2,alarm_priority = %3,pic_name ='%4' ,sound_name1= '%5' where"
|
||
" %6 ").arg("digital").arg(obj).arg(priority).arg(push).arg(voice).arg(condition);
|
||
|
||
m_pWriteDb->execute(sql);
|
||
|
||
if(!m_pWriteDb->commit())
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("保存失败!正在回滚事务~"));
|
||
LOGERROR("保存失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
|
||
m_pWriteDb->rollback();
|
||
}else
|
||
{
|
||
for(int index = 0;index <pointList.size();index++)
|
||
{
|
||
pointList.at(index)->m_desc =desc.isEmpty() ? pointList.at(index)->m_desc : desc;
|
||
pointList.at(index)->m_obj = obj;
|
||
pointList.at(index)->m_priority = priority;
|
||
}
|
||
QMessageBox::information(0,tr("提示"),tr("保存成功!"));
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::showShieldProperty()
|
||
{
|
||
ui->widget_6->setEnabled(true);
|
||
}
|
||
|
||
void AlarmManageWidget::initView()
|
||
{
|
||
//禁用属性框
|
||
setEnableProperty(false);
|
||
//清空点表格
|
||
emit sigClearPointTable();
|
||
|
||
//初始化属性窗
|
||
initProperty();
|
||
|
||
initHide();
|
||
}
|
||
|
||
void AlarmManageWidget::initProperty()
|
||
{
|
||
ui->lineEdit_3->setText(""); //点标签初始化为空
|
||
|
||
ui->cbIfObj->setCurrentIndex(0);
|
||
ui->cbAlarmPriority->setCurrentIndex(0);
|
||
ui->pushText->setText("");
|
||
ui->voiceText->setText("");
|
||
|
||
ui->cbIfLimit->setCurrentIndex(1);
|
||
ui->cbLevel->setCurrentIndex(0);
|
||
ui->doubleSpinBox->setValue(0.0);
|
||
ui->doubleSpinBox_2->setValue(0.0);
|
||
ui->doubleSpinBox_3->setValue(0.0);
|
||
ui->doubleSpinBox_4->setValue(0.0);
|
||
}
|
||
|
||
void AlarmManageWidget::initHide()
|
||
{
|
||
ifLimitChange("");
|
||
ifObjChange("");
|
||
ifLimitLevelChange("");
|
||
}
|
||
|
||
void AlarmManageWidget::reLoadData(const QString &filter)
|
||
{
|
||
if(!m_devgName.isEmpty())
|
||
{
|
||
emit sigSelectPoint(m_devgName,m_curStackIndex,filter);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::deleteAi()
|
||
{
|
||
QModelIndexList aiList = ui->aitableView->selectionModel()->selectedRows(0);
|
||
if(aiList.size() < 1)
|
||
{
|
||
return ;
|
||
}
|
||
if(QMessageBox::No == QMessageBox::question(0, tr("提示"), tr("确认删除?")))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//1删除越限表中信息 2删除测点表中信息 3删除计算量输出表中信息
|
||
|
||
m_pWriteDb->transaction();
|
||
QList<PointInfoPtr> pointList;
|
||
foreach (QModelIndex index, aiList) {
|
||
|
||
pointList.append(m_pAiPointTableModel->getPointInfoByRow(index.row()));
|
||
}
|
||
QString condition=QString();
|
||
QString calCondition=QString();
|
||
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
|
||
{
|
||
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
|
||
calCondition+= QString("'analog.%1.value', ").arg(pointList.at(conIndex)->m_tag);
|
||
}
|
||
if(!condition.isEmpty())
|
||
{
|
||
condition.resize(condition.size() - 2);
|
||
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
|
||
}
|
||
if(!calCondition.isEmpty())
|
||
{
|
||
calCondition.resize(calCondition.size() - 2);
|
||
calCondition = QString("%1 in (%2)").arg("key_id_tag").arg(calCondition);
|
||
}
|
||
QString sqldel;
|
||
sqldel = QString("delete from %1 where %2").arg("analog").arg(condition);
|
||
m_pWriteDb->execute(sqldel);
|
||
sqldel = QString("delete from %1 where %4").arg("analog_limit_info").arg(condition);
|
||
m_pWriteDb->execute(sqldel);
|
||
sqldel = QString("delete from %1 where %2").arg("calc_out_para").arg(calCondition);
|
||
m_pWriteDb->execute(sqldel);
|
||
if(!m_pWriteDb->commit())
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("删除失败!正在回滚事务~"));
|
||
LOGERROR("删除失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
|
||
m_pWriteDb->rollback();
|
||
}else
|
||
{
|
||
initView();
|
||
reLoadData();
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::deleteDi()
|
||
{
|
||
QModelIndexList diList = ui->ditableView->selectionModel()->selectedRows(0);
|
||
if(diList.size() < 1)
|
||
{
|
||
return ;
|
||
}
|
||
if(QMessageBox::No == QMessageBox::question(0, tr("提示"), tr("确认删除?")))
|
||
{
|
||
return;
|
||
}
|
||
|
||
m_pWriteDb->transaction();
|
||
QList<PointInfoPtr> pointList;
|
||
foreach (QModelIndex index, diList) {
|
||
|
||
pointList.append(m_pDiPointTableModel->getPointInfoByRow(index.row()));
|
||
}
|
||
QString condition=QString();
|
||
QString calCondition=QString();
|
||
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
|
||
{
|
||
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
|
||
calCondition+= QString("'digital.%1.value', ").arg(pointList.at(conIndex)->m_tag);
|
||
}
|
||
if(!condition.isEmpty())
|
||
{
|
||
condition.resize(condition.size() - 2);
|
||
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
|
||
}
|
||
if(!calCondition.isEmpty())
|
||
{
|
||
calCondition.resize(calCondition.size() - 2);
|
||
calCondition = QString("%1 in (%2)").arg("key_id_tag").arg(calCondition);
|
||
}
|
||
QString sqldel;
|
||
sqldel = QString("delete from %1 where %2").arg("digital").arg(condition);
|
||
m_pWriteDb->execute(sqldel);
|
||
sqldel = QString("delete from %1 where %2").arg("calc_out_para").arg(calCondition);
|
||
m_pWriteDb->execute(sqldel);
|
||
if(!m_pWriteDb->commit())
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("删除失败!正在回滚事务~"));
|
||
LOGERROR("删除失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
|
||
m_pWriteDb->rollback();
|
||
}else
|
||
{
|
||
initView();
|
||
reLoadData();
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::filter()
|
||
{
|
||
QString searchText = ui->lineEdit->text();
|
||
m_pDevTreeModel->setFilter(searchText);
|
||
}
|
||
|
||
void AlarmManageWidget::alarmActionCheckChange(int index)
|
||
{
|
||
Q_UNUSED(index);
|
||
int priority = ui->cbAlarmPriority->currentData().toInt();
|
||
int act = m_alarmLevelActionMap.value(priority,0);
|
||
QMap<int,QCheckBox*>::iterator it = m_alarmActionCheckMap.begin();
|
||
while (it != m_alarmActionCheckMap.end()) {
|
||
it.value()->setChecked(false);
|
||
if(act>>(it.key()-1) & 0x0001)
|
||
{
|
||
it.value()->setChecked(true);
|
||
}
|
||
it++;
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::ifLimitChange(const QString &)
|
||
{
|
||
int index = ui->cbIfLimit->currentData().toInt();
|
||
|
||
if(index == 1)
|
||
{
|
||
ui->widget_7->setEnabled(true);
|
||
ui->widget_7->setHidden(false);
|
||
ui->widget_10->setHidden(false);
|
||
setEnableObjAlarm(true);
|
||
|
||
}else if(index == 0)
|
||
{
|
||
ui->widget_7->setEnabled(false);
|
||
ui->widget_10->setHidden(true);
|
||
setEnableObjAlarm(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::ifObjChange(const QString &)
|
||
{
|
||
int index = ui->cbIfObj->currentData().toInt();
|
||
|
||
if(index == 1)
|
||
{
|
||
ui->cbAlarmPriority->setEnabled(true);
|
||
}else if(index == 0)
|
||
{
|
||
ui->cbAlarmPriority->setEnabled(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::getPushPicPath()
|
||
{
|
||
QString fileName = QFileDialog::getOpenFileName(this,
|
||
tr("Open Pic"), "../../data/pic", tr("Pic Files (*.glx)"));
|
||
if(!fileName.isEmpty())
|
||
{
|
||
QStringList list = fileName.split("pic/");
|
||
ui->pushText->setText(list.at(list.size()-1));
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::getVoicePath()
|
||
{
|
||
QString fileName = QFileDialog::getOpenFileName(this,
|
||
tr("Open Voice"), m_strMediaPath, tr("Pic Files (*.wav)"));
|
||
if(!fileName.isEmpty())
|
||
{
|
||
QStringList list = fileName.split("/");
|
||
ui->voiceText->setText(list.at(list.size()-1));
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::showAiAlarmProperty(const QModelIndex &cur)
|
||
{
|
||
initProperty();
|
||
initHide();
|
||
|
||
setEnableProperty(true);
|
||
setEnableDesc(true);
|
||
setEnableObjAlarm(true);
|
||
setEnableLimitAlarm(true);
|
||
ui->widget_10->setHidden(false);
|
||
QModelIndexList indexList = ui->aitableView->selectionModel()->selectedRows(0);
|
||
QList<int> rowList;
|
||
QString strText;
|
||
for(QModelIndex index :indexList)
|
||
{
|
||
rowList.append(index.row());
|
||
strText = QString("%1 %2").arg(strText).arg(index.row());
|
||
}
|
||
int size = rowList.size();
|
||
|
||
if(size < 1)
|
||
{
|
||
setEnableProperty(false);
|
||
setEnableLimitAlarm(true);
|
||
setEnableObjAlarm(false);
|
||
ui->widget_10->setHidden(true);
|
||
return ;
|
||
}
|
||
PointInfoPtr info;
|
||
if(rowList.contains(cur.row()))
|
||
{
|
||
info = m_pAiPointTableModel->getPointInfoByRow(cur.row());
|
||
}else
|
||
{
|
||
info = m_pAiPointTableModel->getPointInfoByRow(rowList.last());
|
||
}
|
||
ui->lineEdit_3->setText(info->m_desc);
|
||
|
||
ST_LIMIT_INFO limitInfo;
|
||
ST_OBJ_INFO objInfo;
|
||
bool isLimit = AlarmMng::instance()->isAiObjAlarm(info,objInfo,limitInfo);
|
||
if(isLimit)
|
||
{
|
||
setEnableObjAlarm(true);
|
||
|
||
ui->cbIfLimit->setCurrentIndex(0);
|
||
ui->cbLevel->setCurrentIndex(limitInfo.iLevel);
|
||
ui->doubleSpinBox->setValue(limitInfo.dLimitUp1);
|
||
ui->doubleSpinBox_2->setValue(limitInfo.dLimitDown1);
|
||
ui->doubleSpinBox_3->setValue(limitInfo.dLimitUp2);
|
||
ui->doubleSpinBox_4->setValue(limitInfo.dLimitDown2);
|
||
|
||
ui->voiceText->setText(objInfo.strVoice);
|
||
ui->pushText->setText(objInfo.strPushPic);
|
||
|
||
ui->cbIfObj->setCurrentIndex(objInfo.bIsObj ? 0:1);
|
||
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
|
||
}else
|
||
{
|
||
ui->cbIfLimit->setCurrentIndex(1);
|
||
ui->widget_10->setHidden(true);
|
||
ui->doubleSpinBox->setValue(0.0);
|
||
ui->doubleSpinBox_2->setValue(0.0);
|
||
ui->doubleSpinBox_3->setValue(0.0);
|
||
ui->doubleSpinBox_4->setValue(0.0);
|
||
}
|
||
ifLimitChange("");
|
||
ifObjChange("");
|
||
|
||
if(size > 1)
|
||
{
|
||
ui->lineEdit_3->setText(""); //点标签初始化为空
|
||
setEnableDesc(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::showDiAlarmProperty(const QModelIndex &index)
|
||
{
|
||
initProperty();
|
||
initHide();
|
||
|
||
setEnableProperty(true);
|
||
setEnableDesc(true);
|
||
setEnableObjAlarm(true);
|
||
setEnableLimitAlarm(false);
|
||
|
||
ui->widget_10->setHidden(false);
|
||
QModelIndexList indexList = ui->ditableView->selectionModel()->selectedRows(0);
|
||
QList<int> rowList;
|
||
for(QModelIndex index :indexList)
|
||
{
|
||
rowList.append(index.row());
|
||
}
|
||
int size = rowList.size();
|
||
if(size < 1)
|
||
{
|
||
setEnableProperty(false);
|
||
return ;
|
||
}
|
||
|
||
PointInfoPtr info;
|
||
if(indexList.contains(index))
|
||
{
|
||
info = m_pDiPointTableModel->getPointInfoByRow(index.row());
|
||
}else
|
||
{
|
||
info = m_pDiPointTableModel->getPointInfoByRow(rowList.last());
|
||
}
|
||
|
||
ui->lineEdit_3->setText(info->m_desc);
|
||
ST_OBJ_INFO objInfo;
|
||
bool isObj = AlarmMng::instance()->isDiObjAlarm(info,objInfo);
|
||
ui->pushText->setText(objInfo.strPushPic);
|
||
ui->voiceText->setText(objInfo.strVoice);
|
||
|
||
ui->cbIfObj->setCurrentIndex(isObj ? 0:1);
|
||
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
|
||
ifObjChange("");
|
||
|
||
if(size > 1)
|
||
{
|
||
ui->lineEdit_3->setText(""); //点标签初始化为空
|
||
setEnableDesc(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::showAiProperty()
|
||
{
|
||
initProperty();
|
||
initHide();
|
||
|
||
setEnableProperty(true);
|
||
setEnableDesc(true);
|
||
setEnableObjAlarm(true);
|
||
setEnableLimitAlarm(true);
|
||
ui->widget->setHidden(false);
|
||
QModelIndexList indexList = ui->aitableView->selectionModel()->selectedRows(0);
|
||
QList<int> rowList;
|
||
for(QModelIndex index :indexList)
|
||
{
|
||
rowList.append(index.row());
|
||
}
|
||
int size = rowList.size();
|
||
|
||
if(size < 1)
|
||
{
|
||
setEnableProperty(false);
|
||
setEnableLimitAlarm(true);
|
||
setEnableObjAlarm(false);
|
||
ui->widget_10->setHidden(true);
|
||
return ;
|
||
}
|
||
PointInfoPtr info = m_pAiPointTableModel->getPointInfoByRow(rowList.last());
|
||
|
||
ui->lineEdit_3->setText(info->m_desc);
|
||
|
||
ST_LIMIT_INFO limitInfo;
|
||
ST_OBJ_INFO objInfo;
|
||
bool isLimit = AlarmMng::instance()->isAiObjAlarm(info,objInfo,limitInfo);
|
||
if(isLimit)
|
||
{
|
||
setEnableObjAlarm(true);
|
||
|
||
ui->cbIfLimit->setCurrentIndex(0);
|
||
ui->cbLevel->setCurrentIndex(limitInfo.iLevel);
|
||
ui->doubleSpinBox->setValue(limitInfo.dLimitUp1);
|
||
ui->doubleSpinBox_2->setValue(limitInfo.dLimitDown1);
|
||
ui->doubleSpinBox_3->setValue(limitInfo.dLimitUp2);
|
||
ui->doubleSpinBox_4->setValue(limitInfo.dLimitDown2);
|
||
|
||
ui->voiceText->setText(objInfo.strVoice);
|
||
ui->pushText->setText(objInfo.strPushPic);
|
||
|
||
ui->cbIfObj->setCurrentIndex(objInfo.bIsObj ? 0:1);
|
||
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
|
||
}else
|
||
{
|
||
ui->cbIfLimit->setCurrentIndex(1);
|
||
ui->widget_10->setHidden(true);
|
||
ui->doubleSpinBox->setValue(0.0);
|
||
ui->doubleSpinBox_2->setValue(0.0);
|
||
ui->doubleSpinBox_3->setValue(0.0);
|
||
ui->doubleSpinBox_4->setValue(0.0);
|
||
}
|
||
ifLimitChange("");
|
||
ifObjChange("");
|
||
|
||
if(size > 1)
|
||
{
|
||
ui->lineEdit_3->setText(""); //点标签初始化为空
|
||
setEnableDesc(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::showDiProperty()
|
||
{
|
||
initProperty();
|
||
initHide();
|
||
|
||
setEnableProperty(true);
|
||
setEnableDesc(true);
|
||
setEnableObjAlarm(true);
|
||
setEnableLimitAlarm(false);
|
||
|
||
ui->widget_10->setHidden(false);
|
||
QModelIndexList indexList = ui->ditableView->selectionModel()->selectedRows(0);
|
||
QList<int> rowList;
|
||
for(QModelIndex index :indexList)
|
||
{
|
||
rowList.append(index.row());
|
||
}
|
||
int size = rowList.size();
|
||
if(size < 1)
|
||
{
|
||
setEnableProperty(false);
|
||
return ;
|
||
}
|
||
|
||
PointInfoPtr info = m_pDiPointTableModel->getPointInfoByRow(rowList.last());
|
||
|
||
ui->lineEdit_3->setText(info->m_desc);
|
||
ST_OBJ_INFO objInfo;
|
||
bool isObj = AlarmMng::instance()->isDiObjAlarm(info,objInfo);
|
||
ui->pushText->setText(objInfo.strPushPic);
|
||
ui->voiceText->setText(objInfo.strVoice);
|
||
|
||
ui->cbIfObj->setCurrentIndex(isObj ? 0:1);
|
||
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
|
||
ifObjChange("");
|
||
|
||
if(size > 1)
|
||
{
|
||
ui->lineEdit_3->setText(""); //点标签初始化为空
|
||
setEnableDesc(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::checkClick(const QModelIndex &index)
|
||
{
|
||
int type =index.data(Qt::UserRole+1).toInt();
|
||
initView();
|
||
m_devgName = QString();
|
||
if(type != DEV_GROUP_TYPE)
|
||
{
|
||
return;
|
||
}
|
||
m_devgName = index.data(Qt::UserRole).toString();
|
||
reLoadData();
|
||
if(m_curStackIndex == EN_POINT_AI_INDEX)
|
||
{
|
||
setEnableObjAlarm(false);
|
||
setEnableLimitAlarm(true);
|
||
ui->widget_10->setHidden(true);
|
||
}else
|
||
{
|
||
setEnableLimitAlarm(false);
|
||
setEnableObjAlarm(true);
|
||
ui->widget_10->setHidden(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::ifLimitLevelChange(const QString &)
|
||
{
|
||
int index = ui->cbLevel->currentData().toInt();
|
||
|
||
if(index == 1)
|
||
{
|
||
ui->doubleSpinBox->setEnabled(true);
|
||
ui->doubleSpinBox_2->setEnabled(true);
|
||
ui->doubleSpinBox_3->setEnabled(false);
|
||
ui->doubleSpinBox_4->setEnabled(false);
|
||
}else if(index == 2)
|
||
{
|
||
ui->doubleSpinBox->setEnabled(true);
|
||
ui->doubleSpinBox_2->setEnabled(true);
|
||
ui->doubleSpinBox_3->setEnabled(true);
|
||
ui->doubleSpinBox_4->setEnabled(true);
|
||
}else if(index == 0)
|
||
{
|
||
ui->doubleSpinBox->setEnabled(false);
|
||
ui->doubleSpinBox_2->setEnabled(false);
|
||
ui->doubleSpinBox_3->setEnabled(false);
|
||
ui->doubleSpinBox_4->setEnabled(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::save()
|
||
{
|
||
if(!AlarmMng::instance()->getNomRptEditPerm())
|
||
{
|
||
QMessageBox::warning(this,tr("提示"),tr("当前登录用户无修改权限!"));
|
||
return;
|
||
}
|
||
if(m_curStackIndex == EN_POINT_AI_INDEX)
|
||
{
|
||
saveAi();
|
||
}else if(m_curStackIndex == EN_POINT_DI_INDEX)
|
||
{
|
||
saveDi();
|
||
}
|
||
}
|
||
|
||
bool AlarmManageWidget::checkAiIfSave()
|
||
{
|
||
int isLimit = ui->cbIfLimit->currentData().toInt();
|
||
if(isLimit == 1)
|
||
{
|
||
int level = ui->cbLevel->currentData().toInt();
|
||
double limitup1 = ui->doubleSpinBox->value();
|
||
double limitup2 = ui->doubleSpinBox_3->value();
|
||
double limitlow1 = ui->doubleSpinBox_2->value();
|
||
double limitlow2 = ui->doubleSpinBox_4->value();
|
||
if(level == 2)
|
||
{
|
||
if(limitlow2 >= limitlow1)
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("越下下限值必须小于越下限值"));
|
||
return false;
|
||
}
|
||
if(limitlow1>= limitup1)
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("越下限值必须小于越上限值"));
|
||
return false;
|
||
}
|
||
if(limitup1>=limitup2)
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("越上限值必须小于越上上限值"));
|
||
return false;
|
||
}
|
||
}else if(level == 1)
|
||
{
|
||
if(limitlow1>=limitup1)
|
||
{
|
||
QMessageBox::warning(0,tr("提示"),tr("越下限值必须小于越上限值"));
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void AlarmManageWidget::addObjAlarm()
|
||
{
|
||
if(!AlarmMng::instance()->getNomRptEditPerm())
|
||
{
|
||
QMessageBox::warning(this,tr("提示"),tr("当前登录用户无新增告警点权限!"));
|
||
return;
|
||
}
|
||
if(m_devgName.isEmpty())
|
||
{
|
||
QMessageBox::warning(this,tr("提示"),tr("请选择要添加自定义告警的设备组!"));
|
||
return ;
|
||
}
|
||
QList<ST_DEV_INFO> devList;
|
||
devList = AlarmMng::instance()->getDevInfoByDevGroup(m_devgName);
|
||
if(devList.isEmpty())
|
||
{
|
||
QMessageBox::warning(this,tr("提示"),tr("此设备组下无可用设备,请重新选择设备组!"));
|
||
return ;
|
||
}
|
||
AddObjAlarmDialog dlg(devList,this);
|
||
dlg.setModal(true);
|
||
if(dlg.exec() == QDialog::Accepted)
|
||
{
|
||
initView();
|
||
reLoadData();//重新刷新数据,防止数据不一致
|
||
}
|
||
|
||
}
|
||
|
||
void AlarmManageWidget::updateStack(int index)
|
||
{
|
||
if(m_curStackIndex == index)
|
||
{
|
||
return ;
|
||
}
|
||
m_curStackIndex = index;
|
||
initView();
|
||
reLoadData();
|
||
ui->stackedWidget->setCurrentIndex(index);
|
||
if(m_curStackIndex == EN_POINT_AI_INDEX)
|
||
{
|
||
setEnableObjAlarm(false);
|
||
setEnableLimitAlarm(true);
|
||
ui->widget_10->setHidden(true);
|
||
}else
|
||
{
|
||
setEnableLimitAlarm(false);
|
||
setEnableObjAlarm(true);
|
||
ui->widget_10->setHidden(false);
|
||
}
|
||
}
|
||
|
||
void AlarmManageWidget::filterPoint()
|
||
{
|
||
QString searchText = ui->pointFilterLineEdit->text();
|
||
initView();
|
||
reLoadData(searchText);
|
||
}
|
||
|
||
void AlarmManageWidget::sigOrMul(int checked)
|
||
{
|
||
ui->aitableView->clearSelection();
|
||
ui->ditableView->clearSelection();
|
||
|
||
if(checked == 2)
|
||
{
|
||
ui->aitableView->setSelectionMode(QAbstractItemView::MultiSelection);
|
||
ui->ditableView->setSelectionMode(QAbstractItemView::MultiSelection);
|
||
}else if(checked == 0)
|
||
{
|
||
ui->aitableView->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
ui->ditableView->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
}
|
||
initProperty();
|
||
setEnableProperty(false);
|
||
}
|
||
|
||
void AlarmManageWidget::contextMenuEvent(QContextMenuEvent *event)
|
||
{
|
||
QWidget::contextMenuEvent(event);
|
||
if(m_curStackIndex == EN_POINT_AI_INDEX)
|
||
{
|
||
if(!m_pAiPointTableModel)
|
||
{
|
||
return ;
|
||
}
|
||
if(event->pos().x() < ui->aitableView->pos().x())
|
||
{
|
||
return;
|
||
}
|
||
QRect headerRect = ui->aitableView->horizontalHeader()->rect();
|
||
headerRect.moveTopLeft(ui->aitableView->mapTo(this, QPoint()));
|
||
if(!headerRect.contains(event->pos()))
|
||
{
|
||
QModelIndex index_ = ui->aitableView->indexAt(ui->aitableView->mapFromGlobal(event->globalPos() - QPoint(0, headerRect.height())));
|
||
if(!index_.isValid())
|
||
{
|
||
return;
|
||
}
|
||
QMenu menu(this);
|
||
if(!ui->checkBox->isChecked())
|
||
{
|
||
// showAiProperty();
|
||
// return ;
|
||
}else
|
||
{
|
||
QAction * selectAction = menu.addAction(tr("全选"));
|
||
connect(selectAction, &QAction::triggered, [=](){ui->aitableView->selectAll();showAiProperty();});
|
||
}
|
||
QAction * cancleAction = menu.addAction(tr("全不选"));
|
||
connect(cancleAction,&QAction::triggered,[=](){ui->aitableView->clearSelection();setEnableProperty(false);initProperty();});
|
||
QAction * delAction = menu.addAction(tr("删除"));
|
||
connect(delAction,&QAction::triggered,[=](){deleteAi();});
|
||
menu.exec(QCursor::pos());
|
||
}
|
||
}else
|
||
{
|
||
if(!m_pDiPointTableModel)
|
||
{
|
||
return ;
|
||
}
|
||
if(event->pos().x() < ui->ditableView->pos().x())
|
||
{
|
||
return;
|
||
}
|
||
QRect headerRect = ui->ditableView->horizontalHeader()->rect();
|
||
headerRect.moveTopLeft(ui->ditableView->mapTo(this, QPoint()));
|
||
if(!headerRect.contains(event->pos()))
|
||
{
|
||
QModelIndex index_ = ui->ditableView->indexAt(ui->ditableView->mapFromGlobal(event->globalPos() - QPoint(0, headerRect.height())));
|
||
if(!index_.isValid())
|
||
{
|
||
return;
|
||
}
|
||
QMenu menu(this);
|
||
if(!ui->checkBox->isChecked())
|
||
{
|
||
// showDiProperty();
|
||
// return ;
|
||
}else
|
||
{
|
||
QAction * selectAction = menu.addAction(tr("全选"));
|
||
connect(selectAction, &QAction::triggered, [=](){ui->ditableView->selectAll();showDiProperty();});
|
||
}
|
||
QAction * cancleAction = menu.addAction(tr("全不选"));
|
||
connect(cancleAction,&QAction::triggered,[=](){ui->ditableView->clearSelection();setEnableProperty(false);initProperty();});
|
||
QAction * delAction = menu.addAction(tr("删除"));
|
||
connect(delAction,&QAction::triggered,[=](){deleteDi();});
|
||
menu.exec(QCursor::pos());
|
||
}
|
||
}
|
||
}
|